使用这个函数:
(defun sum-greater (x y z)
(> (+ x y) z))
据我所知,在LISP中,列表中的第一个元素总是代表在其后面的原子/列表上执行的函数。那么为什么LISP不将(x y z)
中的x
视为要在y
和z
上执行的函数呢?显然,这不是期望的行为,但它会是期望的行为。假设定义defun
函数的函数某种方式覆盖了列表的标准LISP评估?如果是这样,请详细说明一下?谢谢。
使用这个函数:
(defun sum-greater (x y z)
(> (+ x y) z))
据我所知,在LISP中,列表中的第一个元素总是代表在其后面的原子/列表上执行的函数。那么为什么LISP不将(x y z)
中的x
视为要在y
和z
上执行的函数呢?显然,这不是期望的行为,但它会是期望的行为。假设定义defun
函数的函数某种方式覆盖了列表的标准LISP评估?如果是这样,请详细说明一下?defun
是一个宏(HyperSpec),这意味着它可以为其参数定义任何评估策略。defun不是一个函数,而是一个特殊形式(或者可以归结为特殊形式),因此它的求值机制与函数不同。类似的例子是if,其中一个参数甚至可以完全被丢弃而不进行任何求值!
defun
表单时,也不希望评估(> ...)
! - Ken