【问题标题】:What is the opposite of symbol-function?符号功能的对立面是什么?
【发布时间】:2012-05-18 12:12:29
【问题描述】:

虽然(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))

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

【问题讨论】:

  • 如果你问我认为你在问什么......这与问“哪个变量是 17?”是一样的

标签: reflection lisp common-lisp


【解决方案1】:

如果您的 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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-12-04
    • 2015-09-23
    • 1970-01-01
    • 2021-03-19
    • 2013-06-22
    • 1970-01-01
    相关资源
    最近更新 更多