1

シンボルにバインドされた関数を(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いたようで、そのチェックを削除するとうまくいくようですが、それでももっと良い方法を見つけたいと思います。

4

1 に答える 1

6

Common Lisp がサポートしている場合は、 ANSI Common Lisp function がありますFUNCTION-LAMBDA-EXPRESSION。3 番目の値は名前です。

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 に答える