以下是我的问题:声明类型并定义一个函数,该函数以两个数字m和n作为输入,并返回一个列表,其中包含m到n之间所有奇数的加倍值。例如,fun 2 11将返回[6、10、14、18、22]。
我不知道如何将数字2和11转换成列表[2..11]。有人知道如何做吗?
Prelude> [2 .. 11]
[2,3,4,5,6,7,8,9,10,11]
也适用于符号值:
Prelude> let [m,n] = [2,11]
Prelude> [m .. n]
[2,3,4,5,6,7,8,9,10,11]
我已经将近两年没有使用Haskell了,如果我错了或者它不起作用,请纠正我:
getDoubledOdd :: Int -> Int -> [Int]
getDoubledOdd m n = map (2*) $ filter odd [m..n]
(\x -> 2 * x)
简写为 (2 *)
。 - Mark Reed*2
周围加上括号,但不需要在m
或n
周围加上括号。此外,每当你有something (
whole rest of line )
时,你可以使用something $
whole rest of line代替。 - Mark Reed[ 2*x | x <- [2..11], odd x ]
该代码基本上是说“让 x 从 2 循环到 11(x <- [2..11]),如果 x 是奇数(odd x),则将 2*x 放入将被返回的列表中”。
[6, 10, 14, 18, 22]
==[6, 10 .. 22]
- josejuan