Hea*_*top 3 ocaml types functional-programming keyword lazy-evaluation
of
在这些惰性列表的定义和使用该类型的函数中,关键字的作用是什么?它只是一个定义 类型的构造函数Cons
,以便它接受 aunit
并计算 a llist
,还是还有更多需要考虑?
type 'a llist = Cons of 'a * (unit -> 'a llist)
let rec lnat i = Cons (i, (fun () -> lnat (i + 1)))
Run Code Online (Sandbox Code Playgroud)
(-lnat
函数接受一个 int 并从该输入 int 开始构造一个所有自然数的列表)。
这of
只是表达“这个代数数据类型构造函数由......组成”的一种方式。
但从你问题的其余部分来看,你似乎并没有真正理解代数数据类型和函数是什么。
它只是一个定义 Cons 类型的构造函数,以便它采用一个单位并计算一个 llist
嗯,不,Cons
不接受 aunit
并计算 a llist
。相反,由一对和 类型的函数Cons
组成。'a
unit -> 'a llist
Cons
是我们所说的a lazy list
,因为除非你遍历它,否则它不会被构造。这是延迟计算。
lnat 函数接受一个 int 并从该输入 int 开始构建所有自然数的列表
再说一次,不。lnat
接受 anint
并返回一个 new Cons
,其中包含 thisint
作为其对的第一个成员以及一个来自unit
to 的函数lnat (i+1)
。
这意味着这是一个无限递归函数,构造从到 的lnat
所有自然数,但前提是您明确探索。i
infinity
Cons
例子:
lnat 0 > Cons (0, (fun () -> lnat 1))
Run Code Online (Sandbox Code Playgroud)
lnat 1
在 a 后面fun ()
,不会计算它的值,从而使您的程序不会无限运行。
归档时间: |
|
查看次数: |
1404 次 |
最近记录: |