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?

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.


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
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.