CLISP 中的意外评估结果

Unexpected eval result in CLISP

我运行遵循CLISP的代码,但结果对我来说很奇怪。

(setq a 'b)
(setq b 'c)
(setq c 'd)
(setq d 8)
(eval a)
(eval c)
(eval (eval a))

最后三行的输出是:

C

8

D

我如何理解输出?

最后两行怎么会有不同的输出?

请帮忙解释一下,万分感谢!

评价(eval c)

  1. 获取变量值 c -> 符号 D
  2. 用符号 D 调用 EVAL -> 数字 8

评价(eval (eval a))

  1. 获取变量值 a -> 符号 B
  2. 使用符号 B 调用 EVAL -> 符号 C
  3. 使用符号 C 调用 EVAL -> 符号 D

Lisp 的一些基本求值规则

  • 符号计算为其值
  • 一个数字计算为自身
  • 列表(foo-function arg)首先计算参数,然后使用计算的参数
  • 调用函数foo-function
  • 一个列表(quote something)returnssomething(无论它是什么)原样