我想知道如何将函数转换为无限列表?
例如,我有一个恢复列表列表的功能。
innerReverse [[1,2,3]]
将返回[[3,2,1]]
。但是,当我尝试take 10 $ innerReverse [[1..]]
时,它基本上会遇到无限循环。
当我innerReverse [(take 10 [1..])]
时,它会给出结果:[[10,9,8,7,6,5,4,3,2,1]]
答案 0 :(得分:8)
Haskell是一种 lazy 语言,这意味着评估仅在实际使用结果之前执行。这就是Haskell有可能拥有无限列表的原因;到目前为止,您访问的列表部分实际上只存储在内存中。
无限列表的概念使得您尝试做的事情变得不可能。在列表[1..]
中,第一个元素是1
。最后一个元素是什么?答案是,这是一个棘手的问题;没有" end"的概念。一个无限的名单。同样,[1..]
反向的第一个元素是什么?再次,这是一个棘手的问题。最后一个元素是1
,但列表没有开头。
我不确定为什么您希望[1..]
的反向为[10,9,8,7,6,5,4,3,2,1]
。后者的反面是[1,2,3,4,5,6,7,8,9,10]
,而不是[1..]
。