这是我的问题:声明类型并定义一个函数,该函数接受两个数字 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]
列表理解和范围的组合将是最标准的方法。
[ 2*x | x <- [2..11], odd x ]
代码基本上说“让 x 从 2 循环到 11 (x <- [2..11]),如果 x 是奇数 (奇数 x),则将 2*x 放入将返回的列表中”。
希望能解释。