Perguntas com a marcação «elisp-macros»

2
"E" vs "quando" para condicionais
Este é um acompanhamento dos comentários sobre esta resposta . Os seguintes bits de código parecem ser equivalentes: (and a b) (when a b) É claro que andpermite colocar mais condições: (and a b c d)significa(when (and a b c) d) Eu costumo usar whenapenas para expressar ramificação. Existem diferenças …



3
Quando usar macro ou não usar [fechado]
Fechado . Esta questão precisa ser mais focada . No momento, não está aceitando respostas. Deseja melhorar esta pergunta? Atualize a pergunta para que ela se concentre apenas em um problema editando esta postagem . Fechado há 3 anos . Quando devo usar macro no meu programa ou não? Esta …

2
Como usar while-no-input?
Da documentação: Execute BODY apenas enquanto não houver entrada pendente. Se a entrada chegar, isso encerra a execução de BODY e while-no-inputretorna t. Sair faz com que ele retorne nulo. Se BODY terminar, while-no-inputretornará qualquer valor que BODY produziu. Se bem entendi, essa macro permite (tentar) executar uma computação pesada …

3
Como posso criar vários desonestos percorrendo uma lista?
Estou trabalhando para otimizar minha configuração do emacs, onde posso criar dinamicamente funções interativas para todos os temas que tenho em uma lista. Abaixo está uma versão simplificada da construção que estou tentando fazer funcionar. ;; List containing names of functions that I want to create (setq my/defun-list '(zz-abc zz-def …

1
Como é determinado o escopo da variável para macros?
Veja o exemplo de macro a seguir, definido em macro.el. (defmacro some-macro (&rest body) `(let ((some-variable 1)) ,@body)) E tomar a seguinte função, definida em um arquivo diferente , function.el. (defun some-function () (some-macro (do-something))) Quando function.elé compilado por byte, será some-variablevinculado sob ligação lexical ou dinâmica? Entendo que isso …

1
eval-when-compile: defsubst vs defmacro vs define-inline
Eu defini algumas funções simples no init.el, por exemplo 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 parecia ser um bom caso de uso para defsubst: (defsubst my-cache-file (x) ...) Então …

1
Compreendendo símbolos não internos e expansão macro?
Quero demonstrar minha falta de conhecimento com um exemplo. Usando as duas definições de macro a seguir, (defmacro for (var from init to final do &rest body) "Execute a simple for loop: (for i from 1 to 10 do (print i))." (let ((tempvar 'max)) `(let ((,var ,init) (,tempvar ,final)) (while …

1
Carregamentos automáticos e variáveis
Eu entendo o que o carregamento automático faz para funções (registrar o arquivo para carregar quando essa função é chamada ou sua cadeia de documentação é recuperada). No entanto, não está claro como usar o recurso de carregamento automático em conjunto com variáveis ​​e macros. Eu tenho duas perguntas: O …

1
Setf expansão estranha
Tentando entender o que setfposso fazer, liguei para (macroexpand '(setf (aref vec i) val)) ⇒ (let* ((v vec) (v i)) (aset v v val)) Isso parece obviamente errado. No entanto, não consegui criar uma instância real em que (setf (aref ..falha. Por exemplo (setq vec (make-vector 10 nil) i 3 …

1
Macro "cl-flet" que não permite funções recursivas
Estou acostumado com a macro elisp obsoleta flete me disseram para mudar para cl-flet. No entanto, ao fazer essa alteração, alguns dos meus programas elisp pararam de funcionar e percebi que o motivo é que, diferentemente flet, cl-fletnão permite funções recursivas. Por exemplo, definindo a função abaixo (defun show-problem-in-action (x) …

2
Como posso modificar uma macro que ligo com frequência?
Eu uso use-packagepara organizar o meu init.el. Percebi que todas as minhas declarações usam :ensure t. Um exemplo de declaração é: (use-package auto-complete :ensure t :diminish auto-complete-mode :init (global-auto-complete-mode t)) Como todas as minhas use-packagedeclarações usam :ensure t, existe uma maneira de modificar use-packagepara incluir implicitamente :ensure tsem modificar diretamente …
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.