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.