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


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.