2017-01-13 55 views
1

对于我的作业,我有一个用C语言编写的小型List解释器,其中有很少的函数已经编码:setcons,car,cdrquotelisp函数,不评估他的论据

我必须添加6个我选择的其他功能。 3个参与评估,3个没有参与评估。 有了评价,我选择:eq+-1, 但我没有对3下什么想法,什么样的Lisp函数的是不用争论的评估有用吗?

+0

共同点Lisp的,所有功能都评估他们的论点如果不需要评估参数,那么您需要一个不评估其参数的宏或特殊形式。 –

+0

也许你可以实现'cond',它不会像函数那样评估它的参数。也许你可以实施一些其他特殊形式的控制流程。也许你可以实现'defun'。 –

+1

为什么要标记common-lisp?你在做一个双命名空间lisp吗?从动态范围的词汇范围?在决定哪些特殊形式执行之前,我会决定在这两个之前执行,除了是否扣篮。 – Sylwester

回答

4

的需要延期评估

所有参数口齿不清functions一直被运用。

这不是macrosspecial operators,其中 一个,quote,你已经实施 的情况下 。

标准例如,当推迟评价是有用的:

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

我的if参数进行评估, 话,就要......

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

然而,特殊操作价值if评估其第一个参数, 决定哪些的另外两个根据该价值进行评估的论据。

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

我执行的建议是: