1
对于我的作业,我有一个用C语言编写的小型List解释器,其中有很少的函数已经编码:set
,cons
,car
,cdr
和quote
。lisp函数,不评估他的论据
我必须添加6个我选择的其他功能。 3个参与评估,3个没有参与评估。 有了评价,我选择:eq
,+
和-1
, 但我没有对3下什么想法,什么样的Lisp函数的是不用争论的评估有用吗?
对于我的作业,我有一个用C语言编写的小型List解释器,其中有很少的函数已经编码:set
,cons
,car
,cdr
和quote
。lisp函数,不评估他的论据
我必须添加6个我选择的其他功能。 3个参与评估,3个没有参与评估。 有了评价,我选择:eq
,+
和-1
, 但我没有对3下什么想法,什么样的Lisp函数的是不用争论的评估有用吗?
所有参数口齿不清functions一直被运用。
这不是macros 和special operators,其中 一个,quote
,你已经实施 的情况下 。
标准例如,当推迟评价是有用的:
(if (under-attack-p)
(launch-missiles)
(print "Peace!"))
我的if
参数进行评估, 话,就要......
print
Peace!
Peace!
(由 print
返回的值),否则返回的launch-missiles
然而,特殊操作价值if
评估其第一个参数, 决定哪些的另外两个根据该价值进行评估的论据。
又见How does `if` not evaluate all its arguments?
共同点Lisp的,所有功能都评估他们的论点如果不需要评估参数,那么您需要一个不评估其参数的宏或特殊形式。 –
也许你可以实现'cond',它不会像函数那样评估它的参数。也许你可以实施一些其他特殊形式的控制流程。也许你可以实现'defun'。 –
为什么要标记common-lisp?你在做一个双命名空间lisp吗?从动态范围的词汇范围?在决定哪些特殊形式执行之前,我会决定在这两个之前执行,除了是否扣篮。 – Sylwester