以下内容摘自SICP的第4.2.3 Streams as Lazy Lists节:
使用延迟评估,流和列表可以是相同的,所以有 不需要特殊表格或单独的列表和流操作。 我们需要做的就是安排事项,以便
cons
不严格。 实现此目的的一种方法是将惰性求值程序扩展为allow 对于非严格的原语,并将cons
实现为其中之一。 一种 更简单的方法是回忆(第2.1.3节)没有根本 需要实现cons
作为原语。相反,我们可以 代表对作为程序:(define (cons x y) (lambda (m) (m x y))) (define (car z) (z (lambda (p q) p))) (define (cdr z) (z (lambda (p q) q)))
问题:我不知道cons
的上述定义如何实现惰性或非严格行为。例如,以下调用cons
,
(define (foo) '(1 2 3))
(define bar (cons 'a (foo)))
会导致在foo
处调用cons
,这是一种非惰性或严格的行为。
那么,我们如何编写一个懒惰或非严格版本的cons
,它也不是特殊形式。