Lisp Wierd型函数
一个练习我有以下功能:Lisp Wierd型函数,lisp,Lisp,一个练习我有以下功能: (defun ifnot (test e1 e2) (if test e2 e1)) 我被要求描述以下表达式的评估: (ifnot nil "OK" (error "Unexpected test outcome")) 我不知道问题是关于令牌“nil”还是关于内置错误,您可以帮助我吗?如果不是,正如您所写,这是一个函数。对函数求值时,在对函数体求值之前对所有参数求值。虽然在您的示例中,e2的值被丢弃,但仍会计算e2,因此仍会调用error。如果它是一个宏,那么它
(defun ifnot (test e1 e2)
(if test e2 e1))
我被要求描述以下表达式的评估:
(ifnot nil "OK" (error "Unexpected test outcome"))
我不知道问题是关于令牌“nil”还是关于内置错误,您可以帮助我吗?
如果不是,正如您所写,这是一个函数。对函数求值时,在对函数体求值之前对所有参数求值。虽然在您的示例中,e2
的值被丢弃,但仍会计算e2
,因此仍会调用error
。如果它是一个宏,那么它将按照您的预期工作:
(defmacro ifnot (test e1 e2)
`(if ,test ,e2 ,e1))
这样,代码
(ifnot nil "OK" (error "Unexpected test outcome"))
在编译时替换为:
(if nil (error "Unexpected test outcome") "OK")
什么问题?这个练习是关于何时以及是否对函数的参数求值。这个练习说对函数调用求值(如果不是nil“OK”…)会产生错误,我想知道这个错误会是什么意外的测试结果(如果不是nil…
应该像(如果是t…
那样工作,是吗?