标签: range-notation

Haskell范围和浮动

为什么浮点数的Haskell范围符号的行为与整数和字符的行为不同?

Prelude> [1, 3 .. 10] :: [Int]
[1,3,5,7,9] 
Prelude> [1, 3 .. 10] :: [Float]
[1.0,3.0,5.0,7.0,9.0,11.0]
Prelude> ['a', 'c' .. 'f']
"ace"
Run Code Online (Sandbox Code Playgroud)

如果最后一个元素接近上限,我会理解它,但这显然不是一个舍入问题.

floating-point haskell range-notation

42
推荐指数
2
解决办法
5368
查看次数

Haskell范围表示法生成列表.意外的输出

我在我的一个讲座中遇到了一个练习,让我对[2,2.2]的输出感到困惑.为什么在输入[2,2 ... 2]时会生成一个带有2的"无限"列表.

我理解符号的方式是第一个元素是起始界限,第二个元素是数字之间的"间隙",最后一个是列表的结尾,换句话说,当达到该数字时停止.

如果我的推理是正确的,为什么表达式[2,2 ... 2]不输出[2]?.


我以为Haskell可能会这样评价它;

  1. 打印列表的第一个元素时,它等于最后一个元素,因此停止.
  2. 或者,如果没有针对"外部"边界检查第一个元素,那么输出将是[2,2],因为当向前一个数字添加零时(在开始情况下为起始2)我们将到达结束因此停止

我显然不能正确理解符号的工作原理,那么Haskell如何评估表达式呢?

haskell list range-notation

23
推荐指数
2
解决办法
9507
查看次数

Haskell:表达式[0,0.1 .. 1]的意外输出

在评估表达式时:

*main> [0, 0.1 .. 1]
Run Code Online (Sandbox Code Playgroud)

我其实在期待:

 [0, 0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8, 0.9, 1]
Run Code Online (Sandbox Code Playgroud)

但是看到输出结果我感到非常震惊

[0.0,0.1,0.2,0.30000000000000004,0.4000000000000001,0.5000000000000001,0.6000000000000001,0.7000000000000001,0.8,0.9,1.0]
Run Code Online (Sandbox Code Playgroud)

为什么Haskell在评估时产生了这个结果?

floating-point haskell range-notation

8
推荐指数
1
解决办法
471
查看次数

标签 统计

haskell ×3

range-notation ×3

floating-point ×2

list ×1