是否可以更改内置haskell范围函数或文字的步长?

时间:2009-02-09 19:52:18

标签: haskell functional-programming range

默认

[1..5]

给出了这个

[1,2,3,4,5]

也可以使用范围功能完成。是否可以更改点之间的步长,以便我可以得到类似下面的内容?

[1,1.5,2,2.5,3,3.5,4,4.5,5] 

4 个答案:

答案 0 :(得分:20)

[1,1.5..5]

答案 1 :(得分:18)

你必须小心浮点运算。它不能精确地代表1.1,所以如果你试试

Prelude> [0,0.1 .. 1]
[0.0,0.1,0.2,0.30000000000000004,0.4,0.5,0.6,0.7,0.7999999999999999,0.8999999999999999,0.9999999999999999]

最好的方式更像是:

Prelude> map (/10) [0..10]
[0.0,0.1,0.2,0.3,0.4,0.5,0.6,0.7,0.8,0.9,1.0]

答案 2 :(得分:5)

实际上,[1..5]

的语法糖
enumFromTo 1 5 

[1,1.5..5]

enumFromThenTo 1 1.5 5

有关详细信息,请参阅http://en.wikibooks.org/wiki/Haskell/Syntactic_sugar

答案 3 :(得分:0)

我只想详细说明上面的一些答案。正如@mattiast正确提到的那样,

def up(event): canvas.move('character',0,-10) # use tag 'character' 实际上只是用于以下方面的语法糖:

[start, abs(start - stepSize) .. end]

但是,请注意,中间值(在您的情况下,“ 1.5”不是步长,不是,但是,该值应为)开始计算。

因此,如果您想以0.2的步长递减,则由于enumFromThenTo start abs(start - stepSize) end

,我们需要做[2,1.8..1]