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.