3

这是我的问题:声明类型并定义一个函数,该函数接受两个数字 m 和 n 作为输入,并返回一个列表,其中包含 m 和 n 之间所有奇数的加倍值。例如, fun 2 11 将返回 [6, 10, 14, 18, 22]。

我不知道如何将两个数字 2 和 11 放入列表 [2..11]。有谁知道如何做到这一点?

4

3 回答 3

6

使用序列生成(范围语法):

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]
于 2013-10-25T19:24:25.650 回答
1

将近两年没有使用 Haskell 了,如果我错了,请纠正我并且它不起作用:

getDoubledOdd :: Int -> Int -> [Int]
getDoubledOdd m n = map (2*) $ filter odd [m..n]
于 2013-10-25T19:27:31.030 回答
0

列表理解和范围的组合将是最标准的方法。

[ 2*x | x <- [2..11], odd x ]

代码基本上说“让 x 从 2 循环到 11 (x <- [2..11]),如果 x 是奇数 (奇数 x),则将 2*x 放入将返回的列表中”。

希望能解释。

于 2013-10-25T20:43:58.900 回答