好奇心:progn代表什么?


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->宏?

Answers:


31
  1. progn是从类似CL的Lisp方言借来的特殊形式。在它们的实现中,它由多个progs,被求值的表达式以及指定返回哪个表达式值的数字组成。prog1例如,对所有表达式求值并返回第一个prog2表达式的值,progn对所有表达式求值并返回第二个表达式的值,对所有表达式求值并返回第n个或最后一个表达式的值。

  2. progn在Emacs中,Lisp与Clojure等效,do它用作将多个表达式捆绑为一个表达式的方法。例如,您需要将其用于Clojure的if条件。


1
好的答案,我赞成。然而,正式的缘故:你并不真正需要它的条件语句,cond有一个隐含的progn
mbork

2
呃,我是说Clojure中的不具有隐含progn在它的if
wasamasa

2
Emacs还具有prog1prog2作为内置的特殊形式。
cjm 2014年

1
我已经在很多用户的配置中看到了这一点。通过这种方式将多个表达式“捆绑”,而不是在外部一个接一个地对它们进行评估,是否可以提高性能progn
elethan

不知道是什么让你这么想。 progn相当于C语言中的支撑块……
wasamasa
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.