标签:
我原先想let的语义不好用lambda解释,主要是我记得有curring这么一回事
(lambda (a) (lambda (b) a)) == (lambda (a b) a)
但是今天仔细一想好像不是这么回事,
(lambda (a) (lambda (b) a)) == (lambda (a b) a)
先eval foo,给a赋值,然后eval bar,给b赋值
而在((lambda (a b)
a)
(foo bar))中
则是先eval foo,bar,然后对a,b赋值,
式子curring先后语义发生了改变,是我以前记错了?
不过我发现用第二个式子正好是let的语义模型
syntax for let: (let ((var val) ...) body ...) semantic for let: ((lambda (var1 var2 ...) body ...) val1 val2 ...)
此外我还认为Y combinator与letrec或define的语义有关系
标签:
原文地址:http://www.cnblogs.com/zhangfann/p/4356171.html