
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: