Sophie

Sophie

distrib > Fedora > 15 > i386 > by-pkgid > 010670e365eac4bfdf0087ea1c497c2e > files > 69

gauche-0.9.3.2-1.fc15.i686.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)