gpt4 book ai didi

syntax - 为什么 `(= (car x) ' z)` 有效?

转载 作者:太空宇宙 更新时间:2023-11-03 18:45:14 35 4
gpt4 key购买 nike

当我对这个有点困惑时,我在 Arc 教程中跌跌撞撞:

引自Arc Tutorial :

Like Common Lisp assignment, Arc's = is not just for variables, but can reach inside structures. So you can use it to modify lists:

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) 会那样工作?我在这里遗漏了什么?


注意:这是我第一次接触 LISP。

最佳答案

= 是一个特殊的运算符,它不是一个函数。所以它的参数不会根据正常的递归过程进行评估。第一个参数被特殊对待,它标识了一个要赋值的位置,而不是那个位置已经存在的值。它可能必须评估其中的子表达式才能找到位置,但一旦到达该位置,它就会停止评估。第二个参数将被正常评估,以获取分配给那里的值。

关于syntax - 为什么 `(= (car x) ' z)` 有效?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27708540/

35 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com