Common lisp 对功能插槽的写入访问(除defun外)

Common lisp 对功能插槽的写入访问(除defun外),common-lisp,Common Lisp,defun宏将函数对象“存储”在符号的函数槽中,例如: (defun f()“你好”) 打印“Hello”的函数现在存储在符号f的函数槽中(并可通过#'f检索) 是否有其他方法(除defun)将函数对象写入/存储在符号的函数槽中? 因为类似于(setf-minus#-)的东西只会将函数对象存储在符号的值槽中 是否有其他方法(除defun外)在符号的函数槽中写入/存储函数对象 您可以使用: 另一种可能性是使用: 它们几乎相等。主要区别在于symbol function需要一个必须是符号的参数,而

defun
宏将函数对象“存储”在符号的函数槽中,例如:

(defun f()“你好”)

打印“Hello”的函数现在存储在符号
f

的函数槽中(并可通过
#'f
检索)

是否有其他方法(除
defun
)将函数对象写入/存储在符号的函数槽中?

因为类似于
(setf-minus#-)
的东西只会将函数对象存储在符号
的值槽中

是否有其他方法(除defun外)在符号的函数槽中写入/存储函数对象

您可以使用:

另一种可能性是使用:

它们几乎相等。主要区别在于
symbol function
需要一个必须是符号的参数,而
fdefinition
接受一个函数名,函数名也可以是一个列表(请参见)

是否有其他方法(除defun外)在符号的函数槽中写入/存储函数对象

您可以使用:

另一种可能性是使用:


它们几乎相等。主要区别在于,
symbol函数
需要一个必须是符号的参数,
fdefinition
接受一个函数名,它也可以是一个列表(请参见)。

还有
fdefinition
@Renzo@sds谢谢!我一直认为
符号函数
只是一种获取工具。但根据您的示例,它也可以用作setter中的位置。要查看有关
符号值的HyperSpec
。再次感谢。请注意,这只适用于顶级(全局)绑定。它将忽略使用
flet
labels
以及
fdefinition
@Renzo@sds在函数名称空间中创建的词汇绑定谢谢!我一直认为
符号函数
只是一种获取工具。但根据您的示例,它也可以用作setter中的位置。要查看有关
符号值的HyperSpec
。再次感谢。请注意,这只适用于顶级(全局)绑定。它将忽略在带有
flet
标签的函数名称空间中创建的词法绑定
(setf (symbol-function 'f) (lambda () "Bye."))
(f)  ; => "Bye."
(defun g () "Hello again.")
(setf (symbol-function 'f) (symbol-function 'g))
(f)  ; => "Hello again."
(setf (fdefinition 'f) (lambda () "Bye again.")
(f)  ; => "By again"