El apóstrofo es una cita, que le indica al intérprete que no analice la siguiente expresión (el nombre del símbolo). Por lo tanto, 'add-to-list
obtiene el símbolo que contiene el valor de la lista que se pretende evaluar.
Para obtener más información sobre los símbolos, lea la documentación de Symbol (específicamente, los símbolos Symbol Components tienen nombres, valores, definiciones de funciones y listas de propiedades).
Sin leer la documentación, así es como lo explico: Emacs lisp evaluation strategy es pasar por valor (en lugar de por nombre o referencia u otra cosa). Si la cita no estuviera allí, flymake-allowed-file-name-masks
se evaluaría a un valor, y add-to-list
tendría que trabajar directamente en la lista. Esto funcionaría, con las siguientes excepciones. Si la lista estuviera vacía, no habría forma de cambiar a qué apuntaba la variable original. Por la misma razón, no podría agregar elementos al principio de la lista.
Para hacer que esos dos casos funcionen, realmente necesita el nombre de la variable para que pueda modificar puntos.
Probablemente sea útil leer lo siguiente: Introduction to Evaluation, Modifying List Variables y Modifying Existing List Structures.
Si está familiarizado con box diagrams, quizás esto ayude.
imaginar que some-var
puntos a una lista:
somevar
|
|
v
--- --- --- --- --- ---
| | |--> | | |--> | | |--> nil
--- --- --- --- --- ---
| | |
| | |
--> rose --> violet --> buttercup
y que quería poner algo en el frente de esa lista.
Si todo lo que tiene que trabajar con es el valor del puntero en somevar
, entonces lo mejor que puede hacer es poner un nuevo elemento en el frente de la lista, pero que en realidad no puede modificar lo somevar
puntos a (porque no tiene somevar
, tiene valor). De este modo:
somevar
|
|
v
--- --- --- --- --- --- --- ---
| | |--> | | |--> | | |--> | | |--> nil
--- --- --- --- --- --- --- ---
| | | |
| | | |
--> tulip --> rose --> violet --> buttercup
lo tanto, para escribir su propia función 'add-to-list
, se necesita el nombre de la variable.
Por supuesto, si escribió 'add-to-list
como macro, no tendría esa restricción.
¡Obtuve la concepción perfecta ahora! ¡Se puede comparar con una llamada por valor y llamar por referencia en otros idiomas! ¡Gracias! – kjshim