Scheme SICP:非严格或懒惰的“cons”,它是如何工作的?

Scheme SICP:非严格或懒惰的“cons”,它是如何工作的?,scheme,lazy-evaluation,sicp,cons,Scheme,Lazy Evaluation,Sicp,Cons,以下是SICP手册第节的摘录: 使用延迟计算,流和列表可以相同,因此 不需要特殊的表单或单独的列表和流操作。 我们需要做的就是安排事情,使cons不严格。 实现这一点的一种方法是扩展惰性计算器以允许 对于非严格原语,并将cons实现为其中之一An 更简单的方法是回忆(第2.1.3节)没有基本的 需要将cons实现为一个原语。相反,我们可以 将对表示为过程: (define (cons x y) (lambda (m) (m x y))) (define (car z) (z (l

以下是SICP手册第节的摘录:

使用延迟计算,流和列表可以相同,因此 不需要特殊的表单或单独的列表和流操作。 我们需要做的就是安排事情,使
cons
不严格。
实现这一点的一种方法是扩展惰性计算器以允许 对于非严格原语,并将
cons
实现为其中之一An 更简单的方法是回忆(第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)))
不会导致在调用
cons
时调用
foo
,这是一种非惰性或严格的行为


那么,我们如何编写非特殊形式的惰性或非严格版本的
cons

本节假设代码由上一节4.2.2的惰性计算器进行评估,on.

本节假定代码由上一节的惰性计算器4.2.2.Hmm计算。我有点怀疑你在这里说的是真的,但不是完全肯定。例如,上述第4.2.3节引发了前面第3.5.1节中所面临的问题,作者说,在这一节中,必须使用特殊形式的
延迟
cons-stream
。这听起来好像作者在试图摆脱当前第4.2.3节中评估器之外的特殊形式。@molbdnilo如果您可以将您的评论作为回复转发,我将其作为最终结果。