2017-06-01 21 views

回答

1

没关系,我只是发现了保罗·格雷厄姆的书ANSI Common Lisp的答案(看后第二次,第99页。):

(setf (symbol-function 'f) (lambda (x) (* x x))) 

实现(对于大多数的意图和目的)一样

(defun f (x) (* x x)) 
+0

'defun'远远不止这些。 '(macroexpand'(defun f(x)(* x x)))' – Sylwester

+0

这就是为什么我用“为了大多数意图和目的”来表达语句的原因。这在格雷厄姆的书中也有提及。 – BlenderBender

+0

“对于大多数意图和目的”是相当主观的。如果你正在编译文件,'defun'会通知编译器有关避免在同一个文件中引用警告的函数,即使函数是在引用之后声明的。大多数实现都注释了他们在哪里找到defun这样的定义,以便IDE或Emacs + Slime可以跳转到它们。 ''symbol-function'的'setf'没有得到任何结果。 – acelent