diff --git a/lisp2li.lisp b/lisp2li.lisp index 4a46ebb..a7baf1c 100644 --- a/lisp2li.lisp +++ b/lisp2li.lisp @@ -38,8 +38,8 @@ par le compilateur et par l’interpréteur" (add-top-level-binding env (second expr) (cons :lclosure (cons env-bis - (lisp2li (fourth expr) - env-bis))))) + (map-lisp2li (cdddr expr) + env-bis))))) (cons :lit (second expr))) ((eq 'setq (car expr)) (cons :call (cons 'set-binding (list `(:lit . ,env) @@ -62,12 +62,14 @@ par le compilateur et par l’interpréteur" `(let (,(car bindings)) (let* ,(cdr bindings) ,body))) env))) + ((eq 'progn (car expr)) ; PROGN + (cons :progn (map-lisp2li (cdr expr) env))) ((macro-function (car expr)) (lisp2li (macroexpand-1 expr) env)) ; macros ((not (special-operator-p (car expr))) ; fonctions normales. (cons :call (cons (first expr) (map-lisp2li (cdr expr) env)))) (T - (error "special forme NYI ~S" (car expr))) + (error "special form not yet implemented ~S" (car expr))) )) (defun map-lisp2li (expr env) diff --git a/meval.lisp b/meval.lisp index c0a107f..1c89e4c 100644 --- a/meval.lisp +++ b/meval.lisp @@ -18,6 +18,8 @@ (defun map-meval (list env) (mapcar (lambda (x) (meval x env)) list)) +(defun foo (x) x) + ;; Test unitaire (load "test-unitaire") (erase-tests meval)