Sophie

Sophie

distrib > Fedora > 14 > x86_64 > by-pkgid > 5a3d998cc00060c67a9a8d7f23c2d34c > files > 64

gauche-0.8.14-3.fc11.x86_64.rpm

;; Example of using delay and force to realize lazy stream

(define (lcar lis) ;; lazy car
  (car (force lis)))

(define (lcdr lis) ;; lazy cdr
  (cdr (force lis)))

(define (ltake lis n) ;; lazy take
  (if (<= n 0) '() (cons (lcar lis) (ltake (lcdr lis) (- n 1)))))

(define (lmap proc l1 l2) ;; lazy map
  (if (null? l1)
    '()
    (cons (proc (lcar l1) (lcar l2))
          (delay (lmap proc (lcdr l1) (lcdr l2))))))

;; lazy list fibonacci numbers
(define fibs (list* 1 1 (delay (lmap + fibs (cdr fibs)))))

;; try
;(ltake fibs 20)
;(ltake fibs 200)