X-Git-Url: https://thelambdalab.xyz/gitweb/index.cgi?p=scheme.forth.jl.git;a=blobdiff_plain;f=scheme-library.scm;h=f95ed65595fc71e5cf24ef5ef4edf492ad8e1d63;hp=aad91f426c85c5c250e59adb22b65470163dec7a;hb=a95efe1cb2d3774471bb9c0fe4628abe09032ca6;hpb=749dd8439730c404058c7a672252ab19967268ac diff --git a/scheme-library.scm b/scheme-library.scm index aad91f4..f95ed65 100644 --- a/scheme-library.scm +++ b/scheme-library.scm @@ -90,16 +90,18 @@ ; and (define (expand-and-expressions expressions) - (if (null? expressions) - #t - (let ((first (car expressions)) - (rest (cdr expressions))) + (let ((first (car expressions)) + (rest (cdr expressions))) + (if (null? rest) + first `(if ,first ,(expand-and-expressions rest) #f)))) (define-macro (and . expressions) - (expand-and-expressions expressions)) + (if (null? expressions) + #t + (expand-and-expressions expressions))) ; or @@ -107,10 +109,12 @@ (if (null? expressions) #f (let ((first (car expressions)) - (rest (cdr expressions))) - `(if ,first - #t - ,(expand-or-expressions rest))))) + (rest (cdr expressions)) + (val (gensym))) + `(let ((,val ,first)) + (if ,val + ,val + ,(expand-or-expressions rest)))))) (define-macro (or . expressions) (expand-or-expressions expressions))