Ciekawość: co oznacza prognozy?

21

Zgodnie z dokumentacją Emacsa:

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

(progn BODY...)

Eval BODY forms sequentially and return value of last one.
  1. Co oznacza prognskrót (lub jego pochodzenie)?
  2. Useage: Czy to równoważne do Clojure„s ->makro?
Nacięcie
źródło

Odpowiedzi:

32
  1. prognto specjalna forma zapożyczona z dialektów podobnych do CL Lisp. W ich implementacjach składa się z wielu progs, wyrażeń, które są oceniane, i liczby określającej, która wartość wyrażenia jest zwracana. prog1na przykład ocenia wszystkie wyrażenia i zwraca wartość pierwszego, prog2ocenia wszystkie wyrażenia i zwraca wartość drugiego, prognocenia wszystkie wyrażenia i zwraca n-tą, a raczej wartość ostatniego wyrażenia.

  2. prognw Emacs Lisp jest odpowiednikiem Clojure'a, doktóry jest używany jako środek do łączenia wielu wyrażeń w jedno. Będziesz musiał go użyć ifna przykład dla warunkowej Clojure .

wasamasa
źródło
1
Dobra odpowiedź, głosowałem za nią. Jednak ze względu na formalność: tak naprawdę nie jest to konieczne w przypadku warunkowych, condma charakter domyślny progn.
mbork
2
Mówiłam o Clojure, która nie ma w tym żadnego prognznaczenia if.
wasamasa
2
Emacs ma również prog1i prog2jako wbudowane specjalne formularze.
cjm
1
Widziałem to używane w wielu konfiguracjach użytkowników. Czy istnieje wzrost wydajności wynikający z „łączenia” wielu wyrażeń w ten sposób, a nie ich ocenianie jeden po drugim poza progn?
elethan
Nie jestem pewien, co sprawia, że ​​tak myślisz. prognjest odpowiednikiem wzmocnionego bloku w języku podobnym do C ...
wasamasa