符号函数的反义词是什么?

时间:2012-05-18 12:12:30

标签: reflection lisp common-lisp

虽然(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正在投掷,删除该检查似乎有效,但我仍然希望找到更好的方法。

1 个答案:

答案 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