4

在第 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)))))

为什么我错了?

4

2 回答 2

2

不,书上的答案是对的。请注意,表达式出现 3 次(quote ()), 以创建 3 个列表。然后它将各种原子合并到列表中。您的答案包含 5 个列表,而不是 3 个。

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

于 2012-10-18T05:25:45.480 回答
0
(car ((quote ((a b c)))))

尝试运行该代码段;您将收到一条错误消息。该代码的作用是

  1. 生成符号abc的列表,
  2. 尝试将该列表作为函数执行
  3. 将汽车应用于结果。

由于第 2 步将失败(因为'(abc)不是函数),因此永远不会到达第 3 步。

查看原始代码应该清楚,代码的任何部分都没有这样做。

你可能是想说

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

由于 Alex D. 给出的原因,这是错误的。

于 2012-10-18T06:24:07.170 回答