Keingintahuan: Apa arti progn?

21

Menurut dokumentasi Emacs:

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

(progn BODY...)

Eval BODY forms sequentially and return value of last one.
  1. Apa prognkepanjangan dari (atau asalnya)?
  2. Useage: Apakah setara dengan Clojure's ->makro?
Nick
sumber

Jawaban:

32
  1. prognadalah bentuk khusus yang dipinjam dari dialek Lisp seperti CL. Dalam implementasinya terdiri dari beberapa progs, ekspresi yang dievaluasi, dan angka yang menentukan nilai ekspresi yang dikembalikan. prog1misalnya mengevaluasi semua ekspresi dan mengembalikan nilai yang pertama, prog2mengevaluasi semua ekspresi dan mengembalikan nilai yang kedua, prognmengevaluasi semua ekspresi dan mengembalikan yang ke-n, atau lebih tepatnya, nilai ekspresi terakhir.

  2. progndalam Emacs Lisp adalah setara dengan Clojure doyang digunakan sebagai cara untuk menggabungkan banyak ekspresi menjadi satu. ifMisalnya, Anda harus menggunakannya untuk kondisi Clojure .

wasamasa
sumber
1
Jawaban yang bagus, saya membatalkannya. Namun, demi formalitas: Anda tidak benar-benar membutuhkannya untuk kondisi, condmemiliki implisit progn.
mbork
2
Eh, saya berbicara tentang Clojure yang tidak memiliki implisit progndi dalamnya if.
wasamasa
2
Emacs juga memiliki prog1dan prog2sebagai bentuk khusus bawaan.
cjm
1
Saya telah melihat ini digunakan dalam banyak konfigurasi pengguna. Apakah ada peningkatan kinerja dari "bundling" beberapa ekspresi dengan cara ini sebagai lawan untuk mengevaluasi mereka satu demi satu di luar progn?
elethan
Tidak yakin apa yang membuat Anda berpikir demikian. prognadalah setara dengan blok yang diperkuat dalam bahasa C-like ...
wasamasa