9.15
周一
通往无限之路
TAPL 第五章 The Untyped Lambda-Calculus 里提到了匿名递归和不动点组合子。由于之前写过一篇 python 匿名递归的文章,我决定自己在其基础上一步步推导出 Z 组合子,这样把两个部分拼成一篇文章,就构成了从零开始的 Z 组合子推导:匿名递归与不动点组合子
基于 python 推导的另一个好处是:文章的作者(当然是我)和读者能够随时复制代码,在 python 里进行计算验证,例如验证下面这段 python 代码确实能输出
from operator import mul
g = lambda f: lambda k: 1 if k == 1 else mul(k, f(k - 1))
M = (lambda f: g(lambda x: f(f)(x)))
fix2 = lambda g: M(M)
print(fix2(g)(4))
去年这个时候,为了学习组合子,去看了 Lambda-Calculus and Combinators: an Introduction,结果读到第二章就把理智清零了,书上的文字就如同古神的呓语,混乱而邪恶。名字里带 Introduction 的书都是怪物吗?读了 TAPL 才知道,这个领域也是有适合人类读的真·入门书的!
总之,自己推出来一遍 Z 组合子,总算是解了一个心结,也不用去读什么 The Litter Schemer 或者王垠的 Slides 了!
最后,把文章上传在了博客园:匿名递归与不动点组合子,方便广泛分享
开学体验
由于写完上面那篇文章令我过于兴奋,开学体验此时太无聊了,暂时懒得回忆,也懒得写了!