虽然(symbol-function '1+)
给出了与符号#<function 1+>
绑定的函数,但是获取特定函数的符号的方法是什么?例如:(function-symbol #'1+)
=&gt; '1+
?或者我是否必须在当前包装中自行搜索? (希望不是......)
谢谢!
修改
这是原型(但它不起作用,因为如果函数未定义但是被绑定,我会收到错误 - 我真的不明白)
(defun function-symbol (searched)
(loop for f being the symbols in *package*
do (format t "f: ~s~&" f)
when (and (fboundp f)
(eq searched (symbol-function f)))
collect f))
更多编辑:
似乎symbol-value
正在投掷,删除该检查似乎有效,但我仍然希望找到更好的方法。
答案 0 :(得分:6)
如果您的Common Lisp支持它,则有ANSI Common Lisp函数FUNCTION-LAMBDA-EXPRESSION
。它的第三个值是名称。
使用LispWorks:
CL-USER 95 > (defun my-foo () )
MY-FOO
CL-USER 96 > (nth-value 2 (function-lambda-expression #'my-foo))
MY-FOO