【发布时间】:2014-01-25 11:53:15
【问题描述】:
我有这个我不太明白的haskell函数。
ns :: [Integer]
ns = 0 : [n+k | (n, k) <- zip ns [1,3..]]
我被要求“花费 3 ns”。
我认为 ns 是恒定的,所以它只会与列表的第一个元素一起压缩,给出 (0,1)。然后添加时给出 1 的答案。然后它说“需要 3 ns”所以我用列表的前 5 个元素压缩 0,给出... (0,1),(0,3), (0,5 ) 然后添加后,我得到 [1,3,5] 的最终答案。然而,这不是正确的答案。
ns 到底发生了什么?我很难理解...
【问题讨论】:
-
ns是常量,因为它是一个不带参数的函数,并且是纯函数,因此它的值完全取决于 0 个参数的值; 0 个参数可以恰好有 0 个唯一值;也就是说,它的价值不依赖任何东西。 “恒定”并不意味着“评估微不足道”或“有限”或类似的东西。ns中发生的事情与x = 1:x中发生的事情相同。很明显'x'的第一个值是1,很明显x的下一个值是x的第一个值,也就是1,之后的下一个值是x的第一个值……等 -
没有零参数的函数,所有函数都有一个参数。
标签: list haskell list-comprehension