为什么LISP defun在参数参数之前不需要引用?

Pet*_*Bek 13 lisp sbcl common-lisp

采取这个功能:

(defun sum-greater (x y z)
 (> (+ x y) z))
Run Code Online (Sandbox Code Playgroud)

我的理解是,在LISP中,列表中的第一个元素始终表示要在后续原子/列表上执行的函数.那么为什么LISP不将xin (x y z)作为一个函数来对待y和执行z.显然,这不是理想的行为,但这将是预期的行为.

据推测,defun以某种方式定义的函数会覆盖列表的标准LISP评估?如果是这样,你能详细说明吗?

谢谢

Der*_*urk 9

Common Lisp中的IIRC至少defun是一个宏(HyperSpec),这意味着它可以为其参数定义任何评估策略.


dar*_*ioo 6

defun很特别,因为它是一个宏.由于宏可以依赖于实现,所以各种各样的黑魔法都可以在幕后发生.

Lisp HyperSpec(Common Lisp),我引用:"没有任何参数在宏扩展时进行评估".