2011-02-16 93 views
1

我必须写计划与计划..安静有趣,但这就是这种情况。 任何方式,下面是一个例子,试图用我可能使用的所有proucedors来编写“lambda”表达式,并且我还需要编写“Let”表达式。我如何使用类似的方式将“Let”表达式转换为lambda表达式? 谢谢。metacircular评估者

(define (lambda? exp) (tag-check exp 'lambda)) 
  
(define (eval exp env) 
    (cond ((number? exp)  exp) 
     ((symbol? exp)  (lookup exp env)) 
     ((define? exp)  (eval-define exp env)) 
     ((if? exp)   (eval-if exp env)) 
     ((lambda? exp)  (eval-lambda exp env)) 
     ((application? exp) (apply (eval (car exp) env) 
           (map (lambda (e) (eval e env)) 
             (cdr exp)))) 
     (else (error "unknown expression " exp)))) 
  
(define (eval-lambda exp env) 
     (make-procedure (lambda-parameters exp) 
         (lambda-body exp) 
         env)) 

(define (lambda-parameters exp) (cadr exp)) 
(define (lambda-body exp) (cddr exp)) 

(define (make-procedure parameters body env) 
    (list 'procedure parameters body env)) 
+2

你可能会[SICP,4.1自循环直译器(http://mitpress.mit.edu/sicp/full-text/book/book-找到有用的练习4.6 ZH-26.html#%_ sec_4.1) – 2011-02-16 10:06:20

回答

3

你只需要编写一个可以转换的程序。

(让((E1 V1)(E2 V2)......)体..)=>((拉姆达(E1 E2 ...)体..)V1 V2 ...)

并检查了SICP第4章