Preguntas etiquetadas con elisp-macros

Las macros de Emacs Lisp le permiten definir nuevas construcciones de control y otras características del lenguaje. Una macro se define de forma muy similar a una función, pero en lugar de decir cómo calcular un valor, dice cómo calcular otra expresión Lisp, que a su vez se evalúa para calcular el valor. Llamamos a esta expresión la "expansión" de la llamada macro. La llamada de macro primero se expande y luego se evalúa, devolviendo el valor de esa evaluación.

2
"Y" vs "cuándo" para condicionales
Este es un seguimiento de los comentarios sobre esta respuesta . Los siguientes bits de código parecen ser equivalentes: (and a b) (when a b) Por supuesto andte permite poner más condiciones: (and a b c d)significa(when (and a b c) d) Tiendo a usar whensolo para expresar ramificaciones. ¿Hay …



3
Cuándo usar macro o no usar [cerrado]
Cerrada . Esta pregunta necesita estar más centrada . Actualmente no está aceptando respuestas. ¿Quieres mejorar esta pregunta? Actualice la pregunta para que se centre en un problema solo editando esta publicación . Cerrado hace 3 años . ¿Cuándo debo usar macro en mi programa o no? Esta pregunta está …

2
¿Cómo usar while-no-input?
Desde la cadena de documentación: Ejecute BODY solo mientras no haya ninguna entrada pendiente. Si llega la entrada, eso finaliza la ejecución de BODY y while-no-inputdevuelve t. Dejar de fumar hace que regrese cero. Si BODY termina, while-no-inputdevuelve cualquier valor que BODY haya producido. Si entiendo correctamente, esta macro me …

3
¿Cómo puedo crear múltiples defuns al recorrer una lista?
Estoy trabajando en la optimización de mi configuración de emacs donde puedo crear dinámicamente funciones interactivas para todos los temas que tengo en una lista. A continuación se muestra una versión simplificada de la construcción que estoy tratando de hacer funcionar. ;; List containing names of functions that I want …

1
¿Cómo se determina el alcance variable para macros?
Tome el siguiente ejemplo de macro, definido en macro.el. (defmacro some-macro (&rest body) `(let ((some-variable 1)) ,@body)) Y tomar la siguiente función, definida en un archivo diferente , function.el. (defun some-function () (some-macro (do-something))) Cuando function.else compila byte, ¿ some-variablese vinculará bajo enlace léxico o dinámico? Entiendo que esto depende …

1
eval-when-compile: defsubst vs defmacro vs define-inline
Definí algunas funciones simples en init.el, por ejemplo my-cache-file: (defconst my-cache-directory (expand-file-name ".cache" user-emacs-directory)) ; ~/.emacs/.cache (defun my-cache-file (x) (expand-file-name x my-cache-directory)) ; ~/.emacs/.cache/x (setq savehist-file (my-cache-file "savehist")) (setq backup-directory-alist `(("." . ,(my-cache-file "backups/")))) Este parecía un buen caso de uso para defsubst: (defsubst my-cache-file (x) ...) Luego comencé a …


1
Autoloads y variables
Entiendo lo que hace la carga automática para las funciones (registrar el archivo para cargar cuando se llama a dicha función o se recupera su cadena de documentación). Sin embargo, no está claro cómo usar la función de carga automática junto con variables y macros. Tengo dos preguntas: ¿Qué sucede …

1
Setf expansión extraña
Intentando entender qué setfpuedo hacer, llamé (macroexpand '(setf (aref vec i) val)) ⇒ (let* ((v vec) (v i)) (aset v v val)) Esto parece obviamente incorrecto. Sin embargo, no pude crear una instancia real donde (setf (aref ..falla. P.ej (setq vec (make-vector 10 nil) i 3 val 'foo) ⇒ foo …

1
Macro "cl-flet" que no permite funciones recursivas
Estoy acostumbrado a la macro elisp en desuso flety me dijeron que cambiara a cl-flet. Sin embargo, al hacer este cambio, algunos de mis programas elisp dejaron de funcionar y me di cuenta de que la razón es que, a diferencia flet, cl-fletno permite funciones recursivas. Por ejemplo, definiendo la …

2
¿Cómo puedo modificar una macro que llamo con frecuencia?
Yo solía use-packageorganizar mi init.el. Me di cuenta de que todas mis declaraciones usan :ensure t. Un ejemplo de declaración es: (use-package auto-complete :ensure t :diminish auto-complete-mode :init (global-auto-complete-mode t)) Dado que todas mis use-packagedeclaraciones usan :ensure t, ¿hay alguna forma de modificar use-packagepara incluir implícitamente :ensure tsin modificar use-package.el …
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.