Curiosidad: ¿Qué significa progn?

21

De acuerdo con la documentación de Emacs:

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

(progn BODY...)

Eval BODY forms sequentially and return value of last one.
  1. ¿Qué prognsignifica (o su origen)?
  2. Uso: ¿Es equivalente a Clojurela ->macro de?
Mella
fuente

Respuestas:

32
  1. prognes una forma especial prestada de dialectos Lisp similares a CL. En sus implementaciones se compone de múltiples progs, expresiones que se evalúan y un número que especifica qué valor de expresión se devuelve. prog1por ejemplo, evalúa todas las expresiones y devuelve el valor de la primera, prog2evalúa todas las expresiones y devuelve el valor de la segunda, prognevalúa todas las expresiones y devuelve el enésimo, o más bien, el valor de la última expresión.

  2. prognen Emacs Lisp es el equivalente de Clojure doque se usa como medio para agrupar múltiples expresiones en una sola. Tendrá que usarlo para el ifcondicional de Clojure, por ejemplo.

wasamasa
fuente
1
Buena respuesta, lo voté. Sin embargo, en aras de la formalidad: realmente no lo necesita para condicionales, condtiene una implícita progn.
mbork
2
Estaba hablando de Clojure que no tiene implícito prognen él if.
wasamasa
2
Emacs también tiene prog1y prog2como formas especiales incorporadas.
cjm
1
He visto esto usado en muchas configuraciones de usuarios. ¿Existe un aumento en el rendimiento de "agrupar" múltiples expresiones de esta manera en lugar de evaluarlas una después de la otra progn?
2015
No estoy seguro de qué te hace pensar eso. prognes el equivalente de un bloque arriostrado en un lenguaje tipo C ...
wasamasa