¿Cuál es la diferencia entre setqy defvaren Emacs lisp?
Veo la versión común de lisp de la misma pregunta en /programming/3855862 . ¿Son iguales en Elisp?
¿Cuál es la diferencia entre setqy defvaren Emacs lisp?
Veo la versión común de lisp de la misma pregunta en /programming/3855862 . ¿Son iguales en Elisp?
Debe hacerle esta pregunta a Emacs : C-h ielija el manual de Elisp ( m Elisp) y busque en el índice "defvar" ( i defvar). Eso te lleva al nodo Definir variables .
Emacs le dice que defvarpermite adjuntar una cadena de documentos y que si la variable ya tiene un valor, entonces no hace nada .
También le informa sobre el uso de defvarsin valor que se asignará: (defvar foo). Le dice que eso declara que la variable tiene un alcance dinámico .
setq no tiene ninguna de esas propiedades.
defvary setqson similares, pero no iguales, en Emacs Lisp y Common Lisp.
defvares una variable global (como en el estilo de programación imperativo) y una convención para la personalización, mientras que setq es más como un enlace let en lenguajes de programación funcionales (con una regla de alcance dinámica / léxica dependiendo de qué modo de alcance global esté activo). .......)setqestablece un valor var, independientemente de si var (ocurrencia) es local.defvardeclara una var como global. (También puede ser "buffer-local":.local-variable-p) Una ocurrencia var enlazada como una función arg o byletes "local" en el sentido habitual. Si una var unida porletetc. es global (o local en el búfer), entonces se crea un enlace local (sentido habitual) para la duración / alcance de esolet. Dentro de ese alcance vinculante,setqcambia el valor local. Es mejor hablar de que una ocurrencia var es local (en la pila) o global (en el montón) que una var es así.M-x report-emacs-bugsugerirle mejoras que podrían ayudar a otros a hacerlo más fácil.