diff options
-rw-r--r-- | ChangeLog | 9 | ||||
-rw-r--r-- | lib.c | 6 |
2 files changed, 11 insertions, 4 deletions
@@ -1,5 +1,14 @@ 2011-12-14 Kaz Kylheku <kaz@kylheku.com> + * lib.c (car, cdr): Semantics fix for lazy conses. + Ignore the return value of the lazy cons function: do not + return nil if the function returns nil. + This useless behavior was a source of inconvenience in lazy + cons programming, requiring the lazy function to return + non-nil in addition to installing the car and cdr fields. + +2011-12-14 Kaz Kylheku <kaz@kylheku.com> + * arith.c (abso): broken for fixnums. 2011-12-14 Kaz Kylheku <kaz@kylheku.com> @@ -183,8 +183,7 @@ val car(val cons) if (cons->lc.func == nil) { return cons->lc.car; } else { - if (!funcall1(cons->lc.func, cons)) - return nil; + funcall1(cons->lc.func, cons); return cons->lc.car; } default: @@ -203,8 +202,7 @@ val cdr(val cons) if (cons->lc.func == nil) { return cons->lc.cdr; } else { - if (!funcall1(cons->lc.func, cons)) - return nil; + funcall1(cons->lc.func, cons); return cons->lc.cdr; } default: |