33 lines
581 B
Scheme
33 lines
581 B
Scheme
(==> (force (delay (+ 1 2))) 3)
|
|
|
|
(==> (let ((p (delay (+ 1 2))))
|
|
(list (force p) (force p))) (3 3))
|
|
|
|
(assert (promise? (delay (+ 1 2))))
|
|
|
|
|
|
; promises computed at most once
|
|
(define count 0)
|
|
|
|
(define p
|
|
(delay
|
|
(begin
|
|
(set! count (+ count 1))
|
|
(* x 3))))
|
|
|
|
(define x 5)
|
|
|
|
(==> count 0)
|
|
(assert (promise? p))
|
|
(==> (force p) 15)
|
|
(assert (promise? p))
|
|
(==> count 1)
|
|
(==> (force p) 15)
|
|
(==> count 1)
|
|
|
|
|
|
(define (integers-starting-from n)
|
|
(cons-stream n (integers-starting-from (+ n 1))))
|
|
|
|
(assert (equal? (stream-head (integers-starting-from 0) 5) '(0 1 2 3 4)))
|