2011-02-16 3 views
1

Je dois écrire schéma avec schéma .. calme drôle, mais c'est la situation. De toute façon, Voici un exemple pour essayer d'écrire "lambda" expression avec tous les proucedors que je peux utiliser, et j'ai besoin d'aide pour écrire "Let" expression aussi. Comment puis-je traduire l'expression "Let" en lambda de la même manière? Merci.L'évaluateur métacirculaire

(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

vous trouverez peut-être l'exercice utile 4.6 sur [SICP, 4.1 Metacircular Evaluator] (http://mitpress.mit.edu/sicp/full-text/book/book- ZH-26.html #% _ sec_4.1) –

+0

hey, merci. existe-t-il des solutions à ces exercices partout? –

+2

consultez http://eli.thegreenplace.net/category/programming/lisp/sicp/ –

Répondre

3

Vous avez juste besoin d'écrire un programme qui pourrait être transformé.

(corps soit ((e1 v1) (e2 v2) ...) ..) => ((lambda (e1 e2 ...) corps ..) v1 v2 ...)

et consultez le chapitre 4. SICP