2011-02-16 92 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章