The Lambda Lab
/
projects
/
scheme.forth.jl.git
/ commitdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
| commitdiff |
tree
raw
|
patch
|
inline
| side by side (parent:
749dd84
)
Fixed AND and OR implementations
author
Tim Vaughan
<tgvaughan@gmail.com>
Sun, 6 Nov 2016 08:41:33 +0000
(21:41 +1300)
committer
Tim Vaughan
<tgvaughan@gmail.com>
Sun, 6 Nov 2016 08:41:33 +0000
(21:41 +1300)
scheme-library.scm
patch
|
blob
|
history
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))