在Haskell中,一些列表是循环的:
ones = 1 : ones
其他的则不是:
nums = [1..]
然后有这样的事情:
more_ones = f 1 where f x = x : f x
这表示与ones
相同的值,当然,该值是一个重复序列。但它是否在内存中表示为循环数据结构是值得怀疑的。(实现可以做到这一点,但是this answer explains that "it's unlikely that this will happen in practice"。)
假设我们使用一个Haskell实现,并使用一个内置函数isCycle :: [a] -> Bool
来检查参数在内存中表示的结构。如果列表是物理循环的,则返回True
;如果参数的长度有限,则返回False
。否则,它将无法终止。(我想象“that in”,因为不可能用Haskell编写该函数。)
此函数的存在会破坏语言的任何有趣属性吗?
https://stackoverflow.com/questions/30272662
复制相似问题