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) 為真,然後將 form1form2 分組,就好像它們包含在 progn 中一樣when 巨集的擴充套件基本上是:

(if (foo-p foo)
  (progn
    form1
    form2)
  nil)