Я знаком с Emacs Lisp, но не Common (или любым другим) Lisp. Некоторые программисты Lisp предлагают (например, Базовая функция для emacs), что полезно использовать #'
перед аргументами функции в коде Lisp. Например:
(mapc #'my-fun '(1 2 3))
В Emacs Lisp я считаю, что это эквивалентно
(mapc 'my-fun '(1 2 3))
Из справочника elisp, раздел 12.7.
Синтаксис чтения
#'
является кратким для использованияfunction
. следующие формы эквивалентны:(lambda (x) (* x x)) (function (lambda (x) (* x x))) #'(lambda (x) (* x x))
и справки для function
Функцияявляется специальной формой в
eval.c
.(function ARG)
Как
quote
, но предпочтительнее для объектов, которые являются функциями. В байте компиляция,function
приводит к компиляции его аргумента.quote
не может этого сделать.
Итак, это похоже на потенциальную оптимизацию, но не более того. Более того, исходя из фона ML/Haskell, кажется странным рассматривать функцию иначе, чем любые другие данные.
Вопрос:
Согласны ли вы, что #'
следует использовать в аргументах emacs-lisp
функции?
(Краткое объяснение того, почему они необходимы в Common Lisp, также будет замечательным.)
Примечания:
Я думал, что он может читать другую ячейку, когда #'
опущен (значение vs function). Но
это кажется неправильным, потому что документация для function
ничего не говорит о захвате ячейки функции. Это достигается с помощью symbol-function
.
Связанные вопросы:
- # # в общем lisp
- Написание лямбда-выражений в общем lisp
- Почему # 'используется до лямбда в Common Lisp?
но они, похоже, предполагают, что #'
не требуется, по крайней мере, в lambdas.