progn 這個
通用特殊運算子預測用於評估零個或多個形式。返回最後一個表單的值。例如,在下文中, (列印“你好) 進行評估(和它的結果被忽略),然後 42 進行評價,並將其結果( 42 )被返回:
(progn
(print 'hello)
42)
;=> 42
如果預測中沒有任何形式,則返回 nil :
(progn)
;=> NIL
除了對一系列形式進行分組之外,預測還具有如下重要特性:如果預測形式是頂級形式 ,則其中的所有形式都被處理為頂級形式。在編寫擴充套件為多個表單的巨集時,這可能很重要,這些表單應該全部作為頂級表單處理。
Progn 也很有價值,因為它返回最後一個表單的所有值。例如,
(progn
(print 'hello)
(values 1 2 3))
;;=> 1, 2, 3
相反,某些分組表示式僅返回結果生成表單的主要值。
隱含的進展
某些表單使用隱式程序來描述其行為。例如, when 和除非 巨集( 如果形式基本上是單側的)根據隱式預測描述它們的行為。這意味著形式就像
(when (foo-p foo)
form1
form2)
評估並且條件 (foo-p foo) 為真,然後將 form1 和 form2 分組,就好像它們包含在 progn 中一樣。 when 巨集的擴充套件基本上是:
(if (foo-p foo)
(progn
form1
form2)
nil)