Curiosité: que signifie progn?

21

Selon la documentation Emacs:

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

(progn BODY...)

Eval BODY forms sequentially and return value of last one.
  1. Que prognsignifie (ou son origine)?
  2. Utilisation: est-ce équivalent à Clojurela ->macro de?
Entaille
la source

Réponses:

32
  1. prognest une forme spéciale empruntée aux dialectes Lisp de type CL. Dans leurs implémentations, il est composé de plusieurs progs, expressions qui sont évaluées et d'un nombre qui spécifie quelle valeur d'expression est retournée. prog1par exemple, évalue toutes les expressions et renvoie la valeur de la première, prog2évalue toutes les expressions et renvoie la valeur de la seconde, prognévalue toutes les expressions et renvoie la nième, ou plutôt, la valeur de la dernière expression.

  2. progndans Emacs Lisp est l'équivalent de Clojure doqui est utilisé comme moyen de regrouper plusieurs expressions en une seule. Vous aurez besoin de l'utiliser pour le ifconditionnel de Clojure par exemple.

wasamasa
la source
1
Bonne réponse, je l'ai voté. Cependant, par souci de formalité: vous n'en avez pas vraiment besoin pour les conditionnels, conda un implicite progn.
mbork
2
Euh, je parlais de Clojure qui n'a pas implicite progndans son if.
wasamasa
2
Emacs a également prog1et en prog2tant que formes spéciales intégrées.
cjm
1
J'ai vu cela utilisé dans de nombreuses configurations d'utilisateurs. Y a-t-il une amélioration des performances du «regroupement» de plusieurs expressions de cette façon plutôt que de les évaluer l'une après l'autre en dehors de progn?
elethan
Je ne sais pas ce qui vous fait penser cela. prognest l'équivalent d'un bloc contreventé dans un langage de type C ...
wasamasa