Haskell 列表理解:显示偶数和双奇数元素
Haskell List comprehension: show even and double odd elements
我一直在做一项作业,但就是无法完成它。
我应该编写一个函数,它接受一个数字列表并返回一个显示偶数但将所有奇数加倍的列表。 (基本上相同的列表,但赔率翻倍)。
doubleOdd :: [Integer] -> [Integer]
doubleOdd [] = []
doubleOdd a = [x*2 | x <- a, odd x]
我的问题是:
- 我只允许使用 +, -, *, /, ==, /=, sum, mod, elem, maximum, odd, even
- 我不知道我如何获得不同的条件使相同的值起作用(比如如果 x 是偶数 = x 并且在同一个列表理解中有:如果 x 是奇数 = x*2)
到目前为止,我只需要打印偶数或奇数,但不会同时打印.....
希望有人能帮助我。
在递归的情况下,用两个互斥的测试来处理两种可能的情况,奇数和偶数:
doubleOdd a = [ .... | x <- a, y <- ([x*2 | .... x] ++ [x | .... x]) ]
由于两个测试互斥,所以只有一个结果。
您要么必须使用 ++
,要么必须使用 if...then...else
。如果没有其中之一,我看不出有什么方法可以做到这一点。
或者也许可以通过一些算术技巧来完成,但那将是一道数学题,而不是 Haskell 题。
如果您正在寻找数学技巧版本:
> take 10 $ [ x + (x `mod` 2) * x | x <- [1..] ]
[2,2,6,4,10,6,14,8,18,10]
(你可以用 mod
做很多这样的作弊)
我一直在做一项作业,但就是无法完成它。
我应该编写一个函数,它接受一个数字列表并返回一个显示偶数但将所有奇数加倍的列表。 (基本上相同的列表,但赔率翻倍)。
doubleOdd :: [Integer] -> [Integer]
doubleOdd [] = []
doubleOdd a = [x*2 | x <- a, odd x]
我的问题是:
- 我只允许使用 +, -, *, /, ==, /=, sum, mod, elem, maximum, odd, even
- 我不知道我如何获得不同的条件使相同的值起作用(比如如果 x 是偶数 = x 并且在同一个列表理解中有:如果 x 是奇数 = x*2)
到目前为止,我只需要打印偶数或奇数,但不会同时打印.....
希望有人能帮助我。
在递归的情况下,用两个互斥的测试来处理两种可能的情况,奇数和偶数:
doubleOdd a = [ .... | x <- a, y <- ([x*2 | .... x] ++ [x | .... x]) ]
由于两个测试互斥,所以只有一个结果。
您要么必须使用 ++
,要么必须使用 if...then...else
。如果没有其中之一,我看不出有什么方法可以做到这一点。
或者也许可以通过一些算术技巧来完成,但那将是一道数学题,而不是 Haskell 题。
如果您正在寻找数学技巧版本:
> take 10 $ [ x + (x `mod` 2) * x | x <- [1..] ]
[2,2,6,4,10,6,14,8,18,10]
(你可以用 mod
做很多这样的作弊)