Ath*_*ark 2 haskell lazy-evaluation recursive-datastructures
我试图围绕着如何获得无限列表来解决这个问题...这是我的路障:
您有一个类型列表A,并A实现Ord类型类.您可以像这样描述一系列有序元素(例如,intergers):
[1..6]
Run Code Online (Sandbox Code Playgroud)
这相当于......
Cons 1 (Cons 2 (Cons 3 (Cons 4 (Cons 5 (Cons 6 (Empty))))))
Run Code Online (Sandbox Code Playgroud)
haskell如何知道如何构建无限列表?haskell能够创建支持的任何数据类型的无限列表Ord吗?
Haskell"创建"无限列表,因为它不需要创建任何元素.例如,让我们走过的扩张head [1..],导致1在Haskell和严格语言的无限循环.
head [1..]
=== [expand `head`, literally
just inline the definition]
case [1..] of
[] -> error "empty list"
(x : xs) -> x
=== [evaluate [1..] one step,
check if it matches the case]
case 1:[2..] of
[] -> error "empty list"
(x : xs) -> x
=== [it does!]
(1 : [2..]) -> 1
=== [fin]
1
Run Code Online (Sandbox Code Playgroud)
请注意,与大多数语言相比,这是非常落后的,这些语言首先是攻击定义[1..]而不是攻击head.
你可以[x..]不为类型类中的任何类型编写Ord(这只能让我们说出两个东西是否比另一个更大或更小),而是在Enum类型类中[x..]转换为enumFrom xwhere enumFrom :: Enum a => a -> [a].
| 归档时间: |
|
| 查看次数: |
145 次 |
| 最近记录: |