2017-02-05 47 views
1

我正在Prolog基本項目上工作。我想寫一個函數,根據輸入列表返回一個數字。我也想確保當輸入列表爲空時,結果是錯誤的。 函數應該是這樣的 parseList(List,N)其中N是一個數字。我想知道當我們嘗試時返回False的方式基本情況下返回false條件序言

parseList([], N). 

其中N是任意數字。

我試着這樣做的基本情況

parseList([], False). 

然而,這似乎並沒有工作。

任何人都可以幫助我嗎?謝謝!

+0

您不要在Prolog中「返回」false值。如果謂詞不能用給定的參數成功,則謂詞失敗(結果爲「false」)。因此,缺少支持空列表的謂詞子句將自動失敗。把'parseList([],N)'離開你的代碼。 – lurker

+0

但是,不應該有支持謂詞的基本情況,.i.e。當列表不是空的時謂詞的停止點? – therealdev

+0

您的基本案例不需要處理空白列表。它可以處理一個元素的列表,例如*,'parseList([X],N): - ...'那麼遞歸的case可以處理2個或更多的元素,'parseList([X,Y | T], N): - ...'。 – lurker

回答

1

正如Lurker在他的評論中所說的,在這個例子中,忽略空列表條件並處理一個元素的列表將導致空列表失敗。然而,在更一般的情況下,如果你想聲明一個失敗的規則,只需包含false,因爲那永遠不會是真的,或者fail這樣做。例如:

parseList([],_) :- false. 

或(廢棄)

parseList([],_) :- fail. 

(其中_用於表示不重要的變量,否則單例可變警告將被觸發)。

+0

'false/0'是ISO標準的更好選擇和最近的補充:它與'true/0'相比更加明顯。 'fail/0'與'succeed/0'相反,根本不可用。 – mat

相關問題