我正在学习Lisp.现在我正在尝试创建一个函数,它将一些有效的Lisp形式作为参数,并返回一个在调用时执行Lisp形式的函数.例如:
(defun fn (name action)
(setf (symbol-function name)
#'(lambda () action)))
Run Code Online (Sandbox Code Playgroud)
当我传递时,说(+ 4 5 6)该函数是使用特定名称创建的,并在调用时返回总和.
(fn 'add (+ 4 5 6))
(add) ==> 15
Run Code Online (Sandbox Code Playgroud)
但是,如果我调用(fn 'error (assert (= 2 3))它会抛出错误,(= 2 3) must evaluate to a non-NIL value.并且error不会创建带有名称的函数.
如何assert在作为函数参数传递时停止此评估?