Als «elisp-macros» getaggte Fragen

Mit Emacs Lisp-Makros können Sie neue Steuerelementkonstrukte und andere Sprachfunktionen definieren. Ein Makro wird ähnlich wie eine Funktion definiert, aber anstatt zu erklären, wie ein Wert berechnet wird, wird angegeben, wie ein anderer Lisp-Ausdruck berechnet wird, der wiederum zur Berechnung des Werts ausgewertet wird. Wir nennen diesen Ausdruck die "Erweiterung" des Makroaufrufs. Der Makroaufruf wird zuerst erweitert und dann ausgewertet, wobei der Wert dieser Auswertung zurückgegeben wird.

13
"Und" vs "wann" für Bedingungen

Dies ist eine Fortsetzung der Kommentare zu dieser Antwort . Die folgenden Codebits scheinen äquivalent zu sein: (and a b) (when a b) Natürlich andkönnen Sie mehr Bedingungen stellen: (and a b c d)bedeutet(when (and a b c) d) Ich neige dazu, whennur Verzweigungen auszudrücken. Gibt es...

12
Wann man ein Makro benutzt oder nicht benutzt [closed]

Geschlossen . Diese Frage muss gezielter gestellt werden . Derzeit werden keine Antworten akzeptiert. Möchten Sie diese Frage verbessern? Aktualisieren Sie die Frage so, dass sie sich nur auf ein Problem konzentriert, indem Sie diesen Beitrag bearbeiten . Geschlossen vor 3 Jahren . Wann sollte ich...

11
Wie verwende ich, während ich keine Eingabe mache?

Aus der Dokumentationszeichenfolge: Führen Sie BODY nur aus, solange keine Eingabe ansteht. Wenn eine Eingabe eintrifft, wird die Ausführung von BODY beendet und while-no-inputt zurückgegeben. Wenn Sie aufhören, wird Null zurückgegeben. Wenn BODY beendet ist, while-no-inputwird der von BODY...

8
Autoloads und Variablen

Ich verstehe, was das automatische Laden für Funktionen bewirkt (Registerdatei, die geladen werden soll, wenn eine solche Funktion aufgerufen oder ihre Dokumentationszeichenfolge abgerufen wird). Es ist jedoch nicht klar, wie die Autoload-Funktion in Verbindung mit Variablen und Makros verwendet...

8
Nicht-interne Symbole und Makro-Erweiterung verstehen?

Ich möchte meinen Mangel an Wissen anhand eines Beispiels demonstrieren. Verwenden Sie die folgenden zwei Makrodefinitionen: (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...

7
Wie kann ich ein Makro ändern, das ich häufig aufrufe?

Ich use-packageorganisiere meine init.el. Mir ist aufgefallen, dass alle meine Erklärungen verwenden :ensure t. Eine Beispieldeklaration lautet: (use-package auto-complete :ensure t :diminish auto-complete-mode :init (global-auto-complete-mode t)) Gibt es eine Möglichkeit, Änderungen implizit...

7
Makro "cl-flet", das keine rekursiven Funktionen zulässt

Ich bin an das veraltete Elisp-Makro gewöhnt fletund wurde aufgefordert, zu zu wechseln cl-flet. Doch auf diese Änderung gestoppt einige meiner elisp Programme machen Arbeit und ich erkennen , der Grund , dass, im Gegensatz zu flet, cl-fletnicht für rekursive Funktionen erlaubt. Beispiel:...

7
Setf seltsame Erweiterung

Ich versuchte zu verstehen, was setfich tun kann, und rief an (macroexpand '(setf (aref vec i) val)) ⇒ (let* ((v vec) (v i)) (aset v v val)) Dies scheint offensichtlich falsch. Ich konnte jedoch keine tatsächliche Instanz erstellen, bei der ein Fehler (setf (aref ..auftritt. Z.B (setq vec...