“小计划者”中的缺点结果

时间:2012-10-18 05:22:05

标签: lisp scheme cons the-little-schemer

在页面178上,有一个问题:

的值是多少
(cons rep-car
    (cons (cons rep-quote
        (cons
            (cons rep-a
                (cons rep-b
                    (cons rep-c
                        (quote ()))))
            (quote ())))
    (quote ())))

,其中

rep-car is car
rep-quote is quote
rep-a is a
rep-b is b
rep-c is c

书中的答案是

(car (quote (a b c)))

但我认为答案应该是

(car ((quote ((a b c)))))

为什么我错了?

2 个答案:

答案 0 :(得分:2)

不,书中的答案是正确的。请注意,表达式有3次出现(quote ()),以创建3个列表。然后它将各种原子汇集到列表中。你的答案包含5个列表,而不是3个。

(quote ())只返回一个空列表。 (cons 1 (quote ()))将一个项目添加到空列表中以产生(1)

答案 1 :(得分:0)

(car ((quote ((a b c)))))

尝试运行该代码段;你会收到一条错误信息。该代码的作用是

  1. 制作符号列表 a b c
  2. 尝试将该列表作为函数执行
  3. car 应用于结果。
  4. 由于第2步失败(因为'(a b c)不是函数),所以永远不会达到第3步。

    从原始代码中可以清楚地看到,代码的任何部分都没有这样做。

    你可能想说

    (car (quote ((a b c))))
    
    由于Alex D给出的理由,这是错误的。