Я знаком с 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.