Апостроф - это цитата, которая говорит интерпретатору не анализировать следующее выражение (имя символа). Таким образом, 'add-to-list
получает символ, который содержит значение списка, предназначенное для оценки.
Чтобы узнать больше о символах, ознакомьтесь с документацией Symbol (в частности, Symbol Components символы имеют имена, значения, определения функций и списки свойств).
Не прочитывая документацию, я объясняю это: Emacs lisp's evaluation strategy должен пройти по значению (в отличие от имени или ссылки или чего-то еще). Если цитаты там не было, flymake-allowed-file-name-masks
будет оцениваться до значения, а add-to-list
придется работать непосредственно в списке. Это будет работать со следующими исключениями. Если список был пустым, не было бы способа изменить то, на что указала исходная переменная. По этой же причине вы не сможете добавлять элементы в начало списка.
Чтобы эти два случая работали, вам действительно нужно имя переменной, чтобы вы могли изменить то, что это указывает на.
Возможно, было бы полезно прочитать следующее: Introduction to Evaluation, Modifying List Variables и Modifying Existing List Structures.
Если вы знакомы с box diagrams, возможно, это поможет.
Представьте, что some-var
указывает на список:
somevar
|
|
v
--- --- --- --- --- ---
| | |--> | | |--> | | |--> nil
--- --- --- --- --- ---
| | |
| | |
--> rose --> violet --> buttercup
И вы хотите, чтобы положить что-то на передней части этого списка.
Если все, что вы должны работать с этим значением указателя в somevar
, то лучшее, что вы можете сделать, это поместить новый элемент на передней части списка, но вы не можете реально изменить то, что somevar
указует на (потому что у вас нет somevar
, у вас есть значение). Как так:
somevar
|
|
v
--- --- --- --- --- --- --- ---
| | |--> | | |--> | | |--> | | |--> nil
--- --- --- --- --- --- --- ---
| | | |
| | | |
--> tulip --> rose --> violet --> buttercup
Так, чтобы написать свою собственную 'add-to-list
функцию, вам нужно имя переменного.
Конечно, если вы написали 'add-to-list
как macro, у вас не было бы этого ограничения.
У меня есть прекрасная концепция сейчас! Его можно сравнить с вызовом по значению и позвонить по ссылке на других языках! Благодаря! – kjshim