我做一个练习,我有以下功能:
(defun ifnot (test e1 e2)
(if test e2 e1))
我被要求描述对以下表达式的评估:
(ifnot nil "OK" (error "Unexpected test outcome"))
我不知道问题是关于令牌“nil”还是关于内置错误,你能帮我吗?
我做一个练习,我有以下功能:
(defun ifnot (test e1 e2)
(if test e2 e1))
我被要求描述对以下表达式的评估:
(ifnot nil "OK" (error "Unexpected test outcome"))
我不知道问题是关于令牌“nil”还是关于内置错误,你能帮我吗?
ifnot
,正如你所写的,是一个函数。评估函数时,会在评估函数体之前评估所有参数。在您的示例中,虽然值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")