2012-08-04 61 views
0

空變量列表按照HyperSpec,其對DO頁(重點由我提供):Common Lisp的:對於DO

做接受一個任意數迭代瓦爾的這必將 在迭代中並行並行。

然而似乎DO不能接受一個空的變量列表,如在這裏:

(do (()) 
    ((cond n) (end-result)) 
    (cond-1.. 
    (cond-2..)) 

難道DO不能接受一個空VAR列表?是否有一個原因? (我想總是有LOOP)。

我正在運行SBCL。

回答

5

括號太多。這將是:

(do() (condition return-value) forms) 
+0

謝謝,慚愧,我從來沒有想到這一點。 (()),(或(無))的條件是否有理由爲無限循環?這就是爲什麼我認爲你需要爲var列表添加(())或(nil)的原因。 – Soyuz 2012-08-04 16:41:15

3

DO的語法在Common Lisp的標準定義:

do ({var | (var [init-form [step-form]])}*) 
    (end-test-form result-form*) 
    declaration* 
{tag | statement}* 

您可以使用Common Lisp Hyperspec查找任何符號,並找到特殊的運營商和宏的語法。你可以從語法中看到,Lisp需要一個變量形式的列表。這些可以是變量或var的列表,可選的初始化表單和可選的步驟表單。使用此語法,可以使用多個變量與DO

正如您所看到的,只有一個列表結合了最終測試和結果表單。