码迷,mamicode.com
首页 > 其他好文 > 详细

Scheme中let的本质

时间:2015-03-21 21:16:49      阅读:193      评论:0      收藏:0      [点我收藏+]

标签:

  我原先想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的语义有关系

Scheme中let的本质

标签:

原文地址:http://www.cnblogs.com/zhangfann/p/4356171.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!