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…
那样工作,是吗?