18

私は Emacs Lisp には精通していますが、Common (またはその他の) Lisp には精通していません。一部の Lisp プログラマーは (たとえばA basic function for emacs#' ) 、Lisp コードの関数引数の前で使用するのが良いと提案しています。例えば:

(mapc #'my-fun '(1 2 3))

Emacs Lisp では、これは

(mapc 'my-fun '(1 2 3))

elisp マニュアルのセクション 12.7 から。

read 構文#'は、使用の省略形functionです。次の形式はすべて同等です。

 (lambda (x) (* x x))
 (function (lambda (x) (* x x)))
 #'(lambda (x) (* x x))

とのヘルプfunction

function は の特別な形式ですeval.c

(function ARG)

と同様quoteですが、関数であるオブジェクトに適しています。バイト コンパイルでfunctionは、その引数がコンパイルされます。quote それはできない。

したがって、潜在的な最適化のように思えますが、それ以上ではありません。さらに、ML/Haskell のバックグラウンドから来ると、関数を他のデータとは異なる方法で扱うのは奇妙に思えます。

質問:

関数の引数#'で使用することに同意しますか? emacs-lisp(Common Lisp でなぜそれらが必要なのかについての簡単な説明も素晴らしいでしょう。)

ノート:

#'が省略された場合(値と関数)、別のセルを読み取る可能性があると思いました。しかし、ドキュメントにfunctionは関数セルの取得について何も書かれていないため、これは間違っているようです。これは、 を使用して実現されsymbol-functionます。

関連する質問は

#'しかし、少なくともラムダでは、が不要であることを示唆しているようです。

4

1 に答える 1