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

时间:2017-03-02 03:39:16

标签: scheme lazy-evaluation sicp cons

以下内容摘自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,它也不是特殊形式

1 个答案:

答案 0 :(得分:1)

本节假定代码由上一节4.2.2的惰性评估器评估。 – molbdnilo,在Mar 2 '17 at 7:49上。