0
在流程中,可以定义功能,如定义功能流程式风格Common Lisp中,没有defun定义
(define f (lambda (x) ...))
特别的,你可以做这样的事情
(define f (g))
其中g是一些函数返回一个函数。是否可以在Common Lisp中执行相同的操作,即将函数符号与给定的匿名函数关联起来?
在流程中,可以定义功能,如定义功能流程式风格Common Lisp中,没有defun定义
(define f (lambda (x) ...))
特别的,你可以做这样的事情
(define f (g))
其中g是一些函数返回一个函数。是否可以在Common Lisp中执行相同的操作,即将函数符号与给定的匿名函数关联起来?
没关系,我只是发现了保罗·格雷厄姆的书ANSI Common Lisp的答案(看后第二次,第99页。):
(setf (symbol-function 'f) (lambda (x) (* x x)))
实现(对于大多数的意图和目的)一样
(defun f (x) (* x x))
'defun'远远不止这些。 '(macroexpand'(defun f(x)(* x x)))' – Sylwester
这就是为什么我用“为了大多数意图和目的”来表达语句的原因。这在格雷厄姆的书中也有提及。 – BlenderBender
“对于大多数意图和目的”是相当主观的。如果你正在编译文件,'defun'会通知编译器有关避免在同一个文件中引用警告的函数,即使函数是在引用之后声明的。大多数实现都注释了他们在哪里找到defun这样的定义,以便IDE或Emacs + Slime可以跳转到它们。 ''symbol-function'的'setf'没有得到任何结果。 – acelent