虽然(symbol-function '1+)
给函数绑定了符号#<function 1+>
,但是获取符号的方式是什么?像:(function-symbol #'1+)
>> '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))
Run Code Online (Sandbox Code Playgroud)
更多编辑:
它似乎symbol-value
是投掷,删除该检查似乎工作,但我仍然想找到一个更好的方法.
如果你的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
Run Code Online (Sandbox Code Playgroud)