Curiosità: cosa significa progn?


21

Secondo la documentazione di Emacs:

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

(progn BODY...)

Eval BODY forms sequentially and return value of last one.
  1. Cosa prognsignifica (o la sua origine)?
  2. Uso: E 'equivalente a Clojure's ->macro?

Risposte:


32
  1. prognè una forma speciale presa in prestito dai dialetti Lisp simili a CL. Nelle loro implementazioni è composto da più progs, espressioni che vengono valutate e un numero che specifica quale valore di espressione viene restituito. prog1ad esempio valuta tutte le espressioni e restituisce il valore del primo, prog2valuta tutte le espressioni e restituisce il valore del secondo, prognvaluta tutte le espressioni e restituisce l'ennesimo, o meglio, il valore dell'ultima espressione.

  2. prognin Emacs Lisp è l'equivalente di Clojure doche viene usato come mezzo per raggruppare più espressioni in una sola. Dovrai usarlo per il ifcondizionale di Clojure per esempio.


1
Buona risposta, l'ho votato. Tuttavia, per motivi di formalità: non ne hai davvero bisogno per i condizionali, condha un implicito progn.
mbork,

2
Stavo parlando di Clojure che non ha implicito prognnella sua if.
Wasamasa,

2
Emacs ha anche prog1e prog2come forme speciali integrate.
cjm

1
Ho visto questo usato in molte configurazioni degli utenti. C'è un aumento delle prestazioni nel "raggruppare" espressioni multiple in questo modo invece di valutarle una dopo l'altra al di fuori progn?
elethan,

Non sono sicuro di cosa ti faccia pensare. prognè l'equivalente di un blocco controvento in un linguaggio di tipo C ...
wasamasa,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.