bonjour j'ai un problemme avec l'interprete lisp de MccArthy
precisement la fonction eval.
qui est la suivante:
(defun eval.(e a)
(cond
((atom e) (assoc. e a))
((atom (car e))
(cond
((eq (car e) 'quote) (cadr e))
((eq (car e)'atom) (atom (eval. (cadr e) a)))
((eq (car e) 'eq ) (eq (eval. (cadr e) a)
(eval. (caddr e) a)))
((eq (car e) 'car) (car (eval. (cadr e) a)))
((eq (car e) 'cdr) (cdr (eval. (cadr e) a)))
((eq (car e) 'cons.) (cons (eval. (cadr e) a)
(eval. (caddr e) a)))
((eq (car e)'cond) (evcon. (cdr e) a))
(t (eval. (cons (assoc. (car e) a)
(cdr e))
a))))
((eq (caar e) 'lambda)
(eval. (caddar e)
(append. (pair. (cadar e) (evlis. (cdr e) a))
a))))))
mon probleme est que je doit y rajouter defun pour que l'execution de eval. definisse immediatement une nouvelle fonction
et donc j'ai essayer sa:
((eq (caar e) 'defun) (defun bar (l) (eval. (cadr (cdar e))
(append. (pair.
(cadar e)(evlis. (cdr e) a))
a))))))
et je lance eval. comme suite:
(eval. '((defun (x) (cons. x ())) n) '((n (if l (cons (car l) l) l)) (t t) ( () ())))
le hic est que ma fonction definie donc "bar" ne marche pas comme je veux