2010-10-20 3 views
1

J'ai donc écrit ce code. Comment puis-je obtenir le x dans l'instruction if pour évaluer? pour le moment, x réussit toujours, et l'instruction if n'échoue jamais.J'ai une variable qui contient une expression. Par exemple: (> 1 2), comment l'évaluer?

(define expand 
    (lambda (exp) 
    (cond 
    ((symbol? exp) exp) 
    ((pair? exp) 
     (case (car exp) 
     ((and) 
     (if (null? (cdr exp)) '(quote #t) 
      (if (null? (cddr exp)) (cadr exp) 
       (let ((x (cadr exp)) 
         (thunk (lambda() (expand '(and ,(cddr exp)))))) 
        (if x (thunk) 
         `(quote ,x)))))) 
     (else exp))) 
    (else exp)))) 

Répondre

1

Utilisez eval, par exemple:

(if (eval x (null-environment 5)) 
    (thunk) 
    `(quote ,x)) 
+0

Merci, je l'avais essayé. mais il me donne alors cette erreur: La procédure # [compilé-procédure 1 ("global" # x5) # x3 # x412F2C] a été appelée avec 1 argument 'il exige exactement 2 arguments. – Chris

Questions connexes