Curiosidade: o que significa progn?

21

De acordo com a documentação do Emacs:

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

(progn BODY...)

Eval BODY forms sequentially and return value of last one.
  1. O que prognsignifica (ou sua origem)?
  2. Uso: É equivalente a Clojurede ->macro?
usuario
fonte

Respostas:

32
  1. progné um formulário especial emprestado de dialetos Lisp do tipo CL. Em suas implementações, é composto de vários progs, expressões que são avaliadas e um número que especifica qual valor de expressão é retornado. prog1por exemplo, avalia todas as expressões e retorna o valor da primeira, prog2avalia todas as expressões e retorna o valor da segunda, prognavalia todas as expressões e retorna o enésimo, ou melhor, o valor da última expressão.

  2. prognno Emacs, Lisp é o equivalente ao Clojure, doque é usado como meio para agrupar várias expressões em uma única. Você precisará usá-lo para as ifcondições do Clojure, por exemplo.

wasamasa
fonte
1
Boa resposta, voto positivo. No entanto, por uma questão de formalidade: você realmente não precisa disso para condicionais, condtem um implícito progn.
mbork
2
Uh, eu estava falando de Clojure que não tem implícita prognna sua if.
wasamasa
2
O Emacs também possui prog1e prog2como formas especiais incorporadas.
Cjm
1
Eu já vi isso usado em muitas configurações de usuários. Existe um aumento no desempenho ao "agrupar" várias expressões dessa maneira, em vez de avaliá-las uma após a outra fora de progn?
Elethan
Não sei o que faz você pensar isso. progné o equivalente a um bloco braced em um C-como a língua ...
wasamasa