eval: disarm lambda.
authorJan Nieuwenhuizen <janneke@gnu.org>
Sat, 9 Jul 2016 20:47:36 +0000 (22:47 +0200)
committerJan Nieuwenhuizen <janneke@gnu.org>
Sat, 9 Jul 2016 20:47:36 +0000 (22:47 +0200)
mes.c
mes.mes
test.mes

diff --git a/mes.c b/mes.c
index 13d86f0c03251777a1c506f3f7f8d65e193ca77d..2475f4544ba458769ee8a3ebc6d902218e57b266 100644 (file)
--- a/mes.c
+++ b/mes.c
@@ -329,6 +329,8 @@ eval_ (scm *e, scm *a)
 #endif // MACROS
       if (car (e) == &scm_symbol_quote)
         return cadr (e);
+      if (car (e) == &scm_lambda)
+        return e;
 #if QUASIQUOTE
       else if (car (e) == &scm_symbol_unquote)
         return eval (cadr (e), a);
@@ -904,7 +906,7 @@ initial_environment ()
 }
 
 scm *
-define_lambda (scm *x, scm *a)
+define_lambda (scm *x)
 {
   return cons (caadr (x), cons (&scm_lambda, cons (cdadr (x), cddr (x))));
 }
@@ -914,7 +916,7 @@ define (scm *x, scm *a)
 {
   if (atom_p (cadr (x)) != &scm_f)
     return cons (cadr (x), eval (caddr (x), a));
-  return define_lambda (x, a);
+  return define_lambda (x);
 }
 
 scm *
@@ -923,20 +925,20 @@ define_macro (scm *x, scm *a)
 #if DEBUG
   printf ("\nc:define_macro a=");
   scm *aa =cons (&scm_macro,
-               cons (define_lambda (x, a),
+               cons (define_lambda (x),
                      cdr (assoc (&scm_macro, a))));
   display (aa);
   puts ("");
 #endif
   return cons (&scm_macro,
-               cons (define_lambda (x, a),
+               cons (define_lambda (x),
                      cdr (assoc (&scm_macro, a))));
 }
 
 scm *
 loop (scm *r, scm *e, scm *a)
 {
-#if DEBUG
+#if 0//DEBUG
   printf ("\nc:loop e=");
   display (e);
   puts ("");
diff --git a/mes.mes b/mes.mes
index d17b99bc6068b56130f4c40bb356e16e39d28ac5..6abf69d5686abbbab681ced3aafc6effd01d23f2 100644 (file)
--- a/mes.mes
+++ b/mes.mes
    ((atom (car e))
     (cond
      ((eq (car e) 'quote) (cadr e))
+     ((eq (car e) 'lambda) e)
      ((eq (car e) 'unquote) (eval (cadr e) a))
      ((eq (car e) 'quasiquote) (eval-quasiquote (cadr e) a))
      ((eq (car e) 'cond) (evcon (cdr e) a))
index 43112e285bf11757765caeee6eafacada6285be3..2c5e760c3a6c2d8cc0043f0679ef1e3c9ead9068 100644 (file)
--- a/test.mes
+++ b/test.mes
 (newline)
 (map display '(1 2 3 4))
 (newline)
-(map '(lambda (x) (display x) (newline)) '(5 6 7 8))
+(map (lambda (x) (display x) (newline)) '(5 6 7 8))
 (newline)
 
-(map '(lambda (i a) (display i) (display ':) (display a) (newline)) '(1 2 3 4) '(a b c d))
+(map (lambda (i a) (display i) (display ':) (display a) (newline)) '(1 2 3 4) '(a b c d))
 (newline)
 
 '()