函数式与逻辑编程语言的深入探索
1. 函数式编程相关内容
在函数式编程中,有一个延迟列表 naturals 的定义示例:
let rec next_int n = (n, Promise (fun() -> next_int (n + 1)));;
let naturals = Promise (fun() -> next_int (1));;
通过以下操作可以获取列表中的元素:
head naturals;;
=⇒1
head (rest naturals);;
=⇒2
head (rest (rest naturals));;
=⇒3
这个延迟列表实际上是无限长的,只有在真正需要时才会进行计算。不过,如果某个值被多次使用,每次都会重新计算。可以使用指针和赋值来对延迟列表的值进行记忆化处理,从而使元素仅计算一次。
此外,还可以开展以下探索:
- 编写 OCaml 版本的相关示例。
- 解决一些 OCaml 相关的练习题。
- 阅读 Lisp 的原始自我定义,并与 Scheme 的类似定义进行比较,分析不同点和相同点,以及 apply 和 eval 在各自定义中的内置内容,思考元循环解释器是否真的能定义某些东西,还是只是“循环推理”。
- 阅读 John Backus 的图灵奖演讲,比较他的 FP 符号与 Lisp 和 ML 语
超级会员免费看
订阅专栏 解锁全文
1万+

被折叠的 条评论
为什么被折叠?



