Add some simple optimizations.
authorChris Hanson <org/chris-hanson/cph>
Wed, 28 Mar 2018 04:33:56 +0000 (21:33 -0700)
committerChris Hanson <org/chris-hanson/cph>
Wed, 28 Mar 2018 04:33:56 +0000 (21:33 -0700)
src/runtime/syntax-constructor.scm

index 7b59f34c35432fda8899988701fc6251dc1edf01..76d82c796b0c599126e3ea911cbb357d2d46f2e5 100644 (file)
@@ -58,14 +58,19 @@ USA.
 (define (scons-and . exprs)
   (make-open-expr
    (lambda (close)
-     (cons (close 'and)
-          (close-parts close exprs)))))
+     (let ((closed (close-parts close (delq #t exprs))))
+       (case (length closed)
+        ((0) #t)
+        ((1) (car closed))
+        (else (cons (close 'and) closed)))))))
 
 (define (scons-begin . exprs)
   (make-open-expr
    (lambda (close)
-     (cons (close 'begin)
-          (close-parts close (remove default-object? exprs))))))
+     (let ((closed (close-parts close (remove default-object? exprs))))
+       (case (length closed)
+        ((1) (car closed))
+        (else (cons (close 'begin) closed)))))))
 
 (define (scons-call operator . operands)
   (make-open-expr
@@ -117,8 +122,11 @@ USA.
 (define (scons-or . exprs)
   (make-open-expr
    (lambda (close)
-     (cons (close 'or)
-          (close-parts close exprs)))))
+     (let ((closed (close-parts close (delq #f exprs))))
+       (case (length closed)
+        ((0) #f)
+        ((1) (car closed))
+        (else (cons (close 'or) closed)))))))
 
 (define (scons-quote datum)
   (make-open-expr