Fixed if form when no alternative.
authorTim Vaughan <tgvaughan@gmail.com>
Sat, 5 Nov 2016 21:09:57 +0000 (10:09 +1300)
committerTim Vaughan <tgvaughan@gmail.com>
Sat, 5 Nov 2016 21:09:57 +0000 (10:09 +1300)
scheme-library.scm
scheme.4th

index b92795d..62a7aa3 100644 (file)
 
 ;; LIBRARY FORMS
 
+(define-macro (while condition . body)
+              `(begin
+                 (define (loop)
+                   (if ,condition
+                     (begin ,@body (loop))))
+                 (loop)))
+
 ;; TESTING
 
 (define-macro (backwards . body)
               (cons 'begin (reverse body)))
 
+(define method '(while (> counter 0)
+                       (display counter) (newline)
+                       (set! counter (- counter 1))))
+
+(define (count)
+  (define counter 10)
+  (while (> counter 0)
+         (display counter) (newline)
+         (set! counter (- counter 1))))
+
 ; Basic iterative summation.  Run this on large numbers to
 ; test garbage collection and tail-call optimization.
 (define (sum n)
index c300365..244a33f 100644 (file)
@@ -1247,10 +1247,10 @@ hide env
 : if-consequent ( ifobj -- conseq )
     cdr cdr car ;
 
-: if-alternative ( ifobj -- alt|false )
+: if-alternative ( ifobj -- alt|none )
     cdr cdr cdr
     nil? if
-        2drop false
+        2drop none
     else
         car
     then ;