2.6这道题目需要一些lambda算子的知识,g9的blog有很不错的文章翻译了。
具体是这样的,首先是one,one即为zero add-1,所以把zero代入add-1的表达式中,得:
将f代入zero的lambda表达式中,得
然后正好可以将x代入后面lambda (x)的表达式中,得到one
two也是同样的道理,把one代入到add-1中
和上面一样,继续:
得到two:
不过这样的推导过程是有错误的,因为没有做alpha代换,以保证beta简化的正确性:有界变量和自由变量的冲突。我就偷个懒了。
具体是这样的,首先是one,one即为zero add-1,所以把zero代入add-1的表达式中,得:
lambda (f) (lambda (x) (f (((lambda (f) (lambda (x) x)) f) x)))将f代入zero的lambda表达式中,得
lambda (f) (lambda (x) (f ((lambda (x) x) x)))然后正好可以将x代入后面lambda (x)的表达式中,得到one
lambda (f) (lambda (x) (f (x)))two也是同样的道理,把one代入到add-1中
lambda (f) (lambda (x) (f ((lambda (f) (lambda (x) (f (x))) f) x)))和上面一样,继续:
lambda (f) (lambda (x) (f (lambda (x) (f (x)) x)))得到two:
lambda (f) (lambda (x) (f (f (x))))不过这样的推导过程是有错误的,因为没有做alpha代换,以保证beta简化的正确性:有界变量和自由变量的冲突。我就偷个懒了。
本文通过具体实例解析了Lambda演算中的one和two是如何定义的。首先介绍了如何通过zero递归获得one,接着进一步展示了从one到two的过程。需要注意的是,在进行beta简化时必须进行alpha代换以避免变量冲突。

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



