(linenum→info "unix/slp.c:2238")

gauche/0.8.12/examples/lazyfib.scm

    1: ;; Example of using delay and force to realize lazy stream
    2: 
    3: (define (lcar lis) ;; lazy car
    4:   (car (force lis)))
    5: 
    6: (define (lcdr lis) ;; lazy cdr
    7:   (cdr (force lis)))
    8: 
    9: (define (ltake lis n) ;; lazy take
   10:   (if (<= n 0) '() (cons (lcar lis) (ltake (lcdr lis) (- n 1)))))
   11: 
   12: (define (lmap proc l1 l2) ;; lazy map
   13:   (if (null? l1)
   14:     '()
   15:     (cons (proc (lcar l1) (lcar l2))
   16:           (delay (lmap proc (lcdr l1) (lcdr l2))))))
   17: 
   18: ;; lazy list fibonacci numbers
   19: (define fibs (list* 1 1 (delay (lmap + fibs (cdr fibs)))))
   20: 
   21: ;; try
   22: ;(ltake fibs 20)
   23: ;(ltake fibs 200)
   24: 
   25: 
   26: 
   27: 
   28:   
   29: 
Syntax (Markdown)