在CLISP中出现意外的评估结果

时间:2018-08-23 09:46:37

标签: lisp common-lisp eval

我运行以下CLISP代码,但结果对我来说很奇怪。

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

最后三行的输出是:

C

8

D

我如何理解输出?

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

请帮助解释这一点,非常感谢!

1 个答案:

答案 0 :(得分:4)

评估(eval c)

  1. 获取变量c->符号D的值
  2. 使用符号D->号码 8
  3. 拨打EVAL

评估(eval (eval a))

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

Lisp的一些基本评估规则

  • 符号的取值为
  • 一个数字会自我评估
  • 列表(foo-function arg)首先评估参数,然后使用该评估参数调用函数foo-function
  • 列表(quote something)按原样返回something(无论是什么)