Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- (use-syntax (ice-9 syncase))
- (define-syntax lazy-cons
- (syntax-rules ()
- ((lazy-cons a b)
- (cons a (delay b)))))
- (define (lazy-car p)
- (car p))
- (define (lazy-cdr p)
- (force (cdr p)))
- (define (lazy-head xs k)
- (define (iter i xs l)
- (if (= i k) l (iter (+ i 1) (lazy-cdr xs) (append l (list (lazy-car xs))))))
- (iter 0 xs '()))
- (define (lazy-ref xs k)
- (define (iter i xs)
- (if (= i k) (lazy-car xs) (iter (+ i 1) (lazy-cdr xs))))
- (iter 0 xs))
- (define (natural n)
- (lazy-cons n (natural (+ n 1))))
- (define naturals
- (natural 0))
- (define (lazy-map . args)
- (define (iter xs S)
- (if (null? xs) S (iter (cdr xs) (append S (list (lazy-cdr (car xs)))))))
- (let ((proc (car args))
- (xs (if (list? (cadr args))
- (cadr args)
- (cdr args))))
- (lazy-cons
- (eval (cons proc (map lazy-car xs)) (interaction-environment))
- (lazy-map proc (iter xs '())))))
- (define (lazy-filter pred? xs)
- (define (iter xs)
- (if (pred? (lazy-car xs)) xs (iter (lazy-cdr xs))))
- (let ((xs (iter xs)))
- (lazy-cons (lazy-car xs) (lazy-filter pred? (lazy-cdr xs)))))
Advertisement
Add Comment
Please, Sign In to add comment