From 8c1a5f19da88db6193ac2af80762c20ad82b032a Mon Sep 17 00:00:00 2001 From: Jan Nieuwenhuizen Date: Sun, 24 Jul 2016 12:40:44 +0200 Subject: [PATCH] fix for-each. --- mes.c | 2 -- scm.mes | 6 ++++-- test.mes | 3 ++- 3 files changed, 6 insertions(+), 5 deletions(-) diff --git a/mes.c b/mes.c index dba380c0..9af325f6 100644 --- a/mes.c +++ b/mes.c @@ -342,8 +342,6 @@ eval (scm *e, scm *a) #if DEBUG printf ("\neval e="); display (e); - printf ("\na="); - display (a); puts (""); #endif scm *macro; diff --git a/scm.mes b/scm.mes index ca29cf44..bca97918 100755 --- a/scm.mes +++ b/scm.mes @@ -158,8 +158,10 @@ (define (identity x) x) (define (for-each f l . r) - (apply map (cons f (cons l r))) - *unspecified*) + (cond ((null? l) '()) + ((null? r) (f (car l)) (for-each f (cdr l))) + ((null? (cdr r)) + (for-each f (cdr l) (cdar r))))) (define (not x) (cond (x #f) diff --git a/test.mes b/test.mes index fba7371d..6c24dd61 100644 --- a/test.mes +++ b/test.mes @@ -94,7 +94,8 @@ (pass-if "map" (sequal? (map identity '(1 2 3 4)) '(1 2 3 4))) (pass-if "map 2 " (sequal? (map (lambda (i a) (cons i a)) '(1 2 3 4) '(a b c d)) - '((1 . a) (2 . b) (3 . c) (4 . d)))) + '((1 . a) (2 . b) (3 . c) (4 . d)))) +(pass-if "for-each" (sequal? (let ((acc '())) (for-each (lambda (x) (set! acc (cons x acc))) '(1 2 3 4)) acc) '(4 3 2 1))) (define xxxa 0) (pass-if "set! " (seq? (begin (set! xxxa 1) xxxa) 1)) (pass-if "set! 2" (seq? (let ((a 0)) (set! a 1) a) 1))