lisp函数,不评估他的参数

时间:2017-01-13 17:14:42

标签: lisp operator-precedence

对于我的作业,我有一个用C编写的小型List解释器,其中几个函数已经编码:setconscarcdr和{{1} }。

我必须添加另外6个我选择的功能。 3参数评估,3参数评估。 通过评估,我选择:quoteeq+, 但我对3下一个没有任何想法,没有参数评估,什么样的Lisp函数是有用的?

1 个答案:

答案 0 :(得分:4)

需要延期评估

始终评估lisp functions的所有参数。

事实并非如此 macrosspecial operators, 其中一个,quote, 你已经实施了。

延迟评估有用的标准示例是:

(if (under-attack-p)
    (launch-missiles)
    (print "Peace!"))

我对if的论点进行了评估, 然后我们会...

  1. 检查我们是否受到攻击
  2. print Peace!
  3. 发射导弹
  4. 如果我们受到攻击,请返回Peace!(返回的值 print),否则返回launch-missiles
  5. 的值

    但是,特殊运算符 if会计算其第一个参数和 根据该值确定要评估的另外两个参数中的哪一个。

    另见How does `if` not evaluate all its arguments?

    我的实施建议是: