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?

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.


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
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.