Цікавість: Що означає прогн?


21

Відповідно до документації Emacs:

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

(progn BODY...)

Eval BODY forms sequentially and return value of last one.
  1. Що prognозначає (або його походження)?
  2. Використання: Це еквівалентно Clojure«s ->макросу?

Відповіді:


32
  1. prognце особлива форма, запозичена з CL-подібних діалектів Ліспа. У їх реалізації він складається з декількох progs, оцінених виразів та числа, яке визначає, яке значення виразу повертається. prog1наприклад, оцінює всі вирази і повертає значення першого, prog2оцінює всі вирази і повертає значення другого, prognоцінює всі вирази і повертає значення n-го, а точніше, значення останнього виразу.

  2. prognв Emacs Lisp - еквівалент Clojure, doякий використовується як засіб для поєднання декількох виразів в одне. Вам потрібно буде використовувати його, наприклад, для Clojure if.


1
Хороша відповідь, я відмовив. Однак задля формальності: ви насправді не потребуєте цього в умовних умовах cond- це неявне progn.
mbork

2
Е - е, я говорив про Clojure , який не має неявний prognв своїй if.
wasamasa

2
Emacs також має prog1і prog2вбудовані спеціальні форми.
cjm

1
Я бачив це, що використовується в багатьох конфігураціях користувачів. Чи є підвищення продуктивності від "поєднання" декількох виразів таким чином, на відміну від оцінки їх один за одним за межами progn?
elethan

Не впевнений, що змушує вас це думати. prognє еквівалентом фігурного блоку в мові,
подібній
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.