当我对此感到困惑时,我在 Arc 教程中磕磕绊绊:
引用自Arc 教程:
像 Common Lisp 赋值一样,Arc 的 = 不仅用于变量,还可以到达内部结构。所以你可以用它来修改列表:
arc> x (a b) arc> (= (car x) 'z) z arc> x (z b)
但是 lisp 是递归执行的,对吧?它说car
返回列表中的第一个值。所以:
arc> (car x)
a
这是有道理的,但是为什么不(= (car x) 'z)
等于(= a 'z)
,这将导致:
arc> a
z
arc> x
(a b) ; Note how this hasn't changed
但事实并非如此。相反,它(= (car x) 'z)
似乎具有以下效果(= x (list 'z (car (cdr x))))
:
arc> (= x '(a b))
(a b)
arc> (= (car x) 'z)
z
arc> x
(z b)
...
arc> (= x '(a b))
(a b)
arc> (= x (list 'z (car (cdr x))))
(z b)
arc> x
(z b)
那么为什么确切地(= (car x) 'z)
以这种方式工作,我在这里错过了什么?