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?

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 .


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
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.