Next: srfi lazy refs, Previous: srfi lazy spec, Up: srfi lazy [Index]
We now provide a general recipe for using the primitives:
{lazy, delay, force}
to express lazy algorithms in Scheme. The transformation is best
described by way of an example: Consider again the stream-filter
algorithm, expressed in a hypothetical lazy language as:
(define (stream-filter p? s)
(if (null? s) '()
(let ((h (car s))
(t (cdr s)))
(if (p? h)
(cons h (stream-filter p? t))
(stream-filter p? t)))))
This algorithm can be espressed as follows in Scheme:
(define (stream-filter p? s)
(lazy
(if (null? (force s)) (delay '())
(let ((h (car (force s)))
(t (cdr (force s))))
(if (p? h)
(delay (cons h (stream-filter p? t)))
(stream-filter p? t))))))
In other words, we:
(), cons) with delay.
car, cdr
and null?).
(lazy …).
The only difference with the [Wad98] transformation described above is
in replacing the combination (delay (force …)) with
(lazy …) in the third rule.