1

虽然(symbol-function '1+)将函数绑定到 symbol #<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))

更多编辑: 似乎symbol-value正在抛出,删除该检查似乎有效,但我仍然想找到更好的方法。

4

1 回答 1

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
于 2012-05-18T19:22:13.347 回答