The Lambda Lab
/
projects
/
scheme.forth.jl.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
Fixed AND and OR implementations
[scheme.forth.jl.git]
/
scheme-library.scm
diff --git
a/scheme-library.scm
b/scheme-library.scm
index
aad91f4
..
f95ed65
100644
(file)
--- a/
scheme-library.scm
+++ b/
scheme-library.scm
@@
-90,16
+90,18
@@
; and
(define (expand-and-expressions expressions)
; 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)
`(if ,first
,(expand-and-expressions rest)
#f))))
(define-macro (and . expressions)
- (expand-and-expressions expressions))
+ (if (null? expressions)
+ #t
+ (expand-and-expressions expressions)))
; or
; or
@@
-107,10
+109,12
@@
(if (null? expressions)
#f
(let ((first (car expressions))
(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))
(define-macro (or . expressions)
(expand-or-expressions expressions))