Added lazy library

This commit is contained in:
Justin Ethier 2016-02-11 22:18:51 -05:00
parent fc6aadffd2
commit 2f89b7c825

View file

@ -1,6 +1,7 @@
(import (scheme base) (import (scheme base)
(scheme char) (scheme char)
(scheme file) (scheme file)
(scheme lazy)
(scheme read) (scheme read)
(scheme write) (scheme write)
(scheme eval) (scheme eval)
@ -340,6 +341,25 @@
(assert:equal "Record type predicate (f)" (record? (cons 1 2)) #f) (assert:equal "Record type predicate (f)" (record? (cons 1 2)) #f)
;; END records ;; END records
;; Lazy evaluation
(assert:equal "Basic lazy" (force (delay (+ 1 2))) 3)
(assert:equal "Lazy test #2"
(let ((p (delay (+ 1 2))))
(list (force p) (force p)))
'(3 3))
((lambda ()
(define integers
(letrec ((next
(lambda (n)
(delay (cons n (next (+ n 1)))))))
(next 0)))
(define head
(lambda (stream) (car (force stream))))
(define tail
(lambda (stream) (cdr (force stream))))
(assert:equal "Lazy #3" (head (tail (tail integers))) 2)))
; TODO: use display, output without surrounding quotes ; TODO: use display, output without surrounding quotes
(write (list *num-passed* " tests passed with no errors")) (write (list *num-passed* " tests passed with no errors"))
;; ;;