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

Scheme中let*的本质

时间:2015-03-21 11:13:43      阅读:589      评论:0      收藏:0      [点我收藏+]

标签:

 

let*Scheme语言中一种常用的赋值方式,今天想到了一种使用lambda演算解释let*的方式。

 

首先我们知道let*的语法定义如下:

(let* ( [ var val ] 

          ...)

  body

  ... )

 

其语义是在环境中求值val,与var绑定后,加入环境,构成新环境,然后在新环境中求值val2...,最后在得到的环境中,求值body

 

scheme来解释是这样的:

(define (eval-let* argslist

   body

   env)

   (let ((new-env (extend-env* argslist env)))

    (eval body new-env)))

 

(define (extend-env* argslist env)

  (cond ((null? argslist)

 env)

(else (let ((var (first (first argslist)))

    (val (second (first arglist))))

(extend-env* (cdr arglist)

     (extend-env var

 (eval-expr val env)

 env))))))

 

 

最后我想到其实用lambda演算解释起来更加的简单:

((lambda (var1)

   ((lambda (var2)

      (...

       (lambda ()

       body1

       ...)))

    val2))

 val1)

 

 

现在想的是用lambda去解释let反而感觉是一件比较麻烦的事了。

Scheme中let*的本质

标签:

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

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