如何用Y组合子定义Lisp?基于SICP课程的技术疑问
关于SICP 7A课程中用Y组合子定义Lisp的疑问
我正在观看SICP 7A课程视频,对1:16:15处“用Y组合子定义Lisp”的内容存在疑问。
我已经理解以下内容:
expt(计算x^n)可通过Y组合子与lambda表达式实现- 递归表达式可视为函数的不动点,例如方程
x=2x-4中的x就是函数f(x)=2x-4的不动点 - 在Scheme中,
expt的递归定义可转化为构造函数F,而expt本身就是F的不动点,即(Y F)
根据讲师Sussman的表述:Lisp是将自身代入eval、apply等递归方程右侧后,左侧仍为Lisp的过程的不动点。我尝试将这个关系表示为如下Scheme代码:
L = (lambda (lisp) (lambda (eval apply) (lisp eval apply))))
并且认为Lisp = L Lisp,也就是L的不动点,等同于无限展开的(L(L(L(L ... (L ?) ... )))),最终就是(Y L)。想请教这样的表述是否正确?
内容的提问来源于stack exchange,提问作者codeDog
相关产品推荐
相关产品推荐

