我想在 Scheme 中创建一个惰性列表。这就是我到目前为止所拥有的。
;; Constructor for Pairs
(define (cons-stream a b)
(cons a (λ() b)))
;; Selectors
(define (car-stream a-stream)
(car a-stream))
(define (cdr-stream a-stream)
((cdr a-stream)))
;; Lazy List using the pairs
(define (lazy-list from)
(cons-stream from (lazy-list (+ from 1))))
;; Take function
(define (take a-lazy-list number)
(define (take-helper i )
(if(= i number)
empty
(cons (car a-lazy-list) (take-helper (+ i 1)))))
(take-helper 0))
惰性列表的问题在于,Scheme 首先计算内部表达式(惰性列表(+ from 1))导致过程进入无限递归。
有没有办法让 con-stream 在没有任何评估的情况下采用这个内部表达式?