Зачем использовать # 'перед аргументами функции в emacs-lisp?
Я знаком с Emacs Lisp, но не с Common (или любым другим) Lisp. Некоторые программисты на Лисп предлагают (например,Основная функция для Emacs) это'хорошо использовать#'
перед аргументами функции в коде Лисп. Например:
(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 это было бы здорово.)
Я думал, что это может прочитать другую клетку, когда#'
опущено (значение против функции). Но это кажется неправильным, потому что документация дляfunction
Безразлично»ничего не сказать о захвате функциональной ячейки. Это достигается с помощью.symbol-function
Связанные вопросы
# в общих чертахНаписание лямбда-выражений в общем lispЗачем #' используется до лямбда в Common Lisp?но они, кажется, предполагают, что#'
не нужно, по крайней мере, в лямбдах.