Neugier: Wofür steht progn?

21

Laut Emacs-Dokumentation:

progn is a special form in `C source code'.

(progn BODY...)

Eval BODY forms sequentially and return value of last one.
  1. Wofür prognsteht (oder woher)?
  2. Verbrauch: Ist es äquivalent zu Clojure‚s - ->Makro?
Nick
quelle

Antworten:

31
  1. prognist eine spezielle Form, die aus CL-ähnlichen Lisp-Dialekten entlehnt wurde. In ihren Implementierungen besteht es aus mehreren progs, ausgewerteten Ausdrücken und einer Zahl, die angibt, welcher Ausdruckswert zurückgegeben wird. prog1Beispielsweise werden alle Ausdrücke ausgewertet und der Wert des ersten zurückgegeben, prog2alle Ausdrücke ausgewertet und der Wert des zweiten zurückgegeben, prognalle Ausdrücke ausgewertet und der n-te bzw. der letzte Wert des Ausdrucks zurückgegeben.

  2. prognin Emacs ist Lisp das Äquivalent von Clojure's, dodas verwendet wird, um mehrere Ausdrücke zu einem einzigen zu bündeln. Sie müssen es beispielsweise für Clojures ifBedingung verwenden.

Wasamasa
quelle
1
Gute Antwort, ich habe es positiv bewertet. Der Formalität halber: Man braucht es nicht wirklich für Bedingungen, condhat ein implizites progn.
mbork
2
Äh, ich habe von Clojure gesprochen, was nichts damit zu tun prognhat if.
Wasamasa
2
Emacs hat auch prog1und prog2als Sonderformen eingebaut.
cjm
1
Ich habe gesehen, dass dies in vielen Benutzerkonfigurationen verwendet wird. Gibt es einen Leistungsschub, wenn mehrere Ausdrücke auf diese Weise "gebündelt" werden, anstatt sie außerhalb von nacheinander auszuwerten progn?
Elethan
Ich bin mir nicht sicher, warum du das denkst. prognist das Äquivalent eines geschweiften Blocks in einer C-ähnlichen Sprache ...
Wasamasa