2012-09-05 72 views
-1

目標:過濾單詞列表

過濾出列表中不是以指定字符開頭的所有單詞。以指定字符開頭的單詞應該存儲在沒有第一個字符的新列表中。

問題:

如果列表中的所有單詞都是允許的,它按預期工作。當列表中的單詞不被允許時,檢查失敗(如預期的那樣),但是它退出謂詞而不嘗試繼續列表中的下一個單詞(不是預期的),就像在回溯並嘗試重做下列單詞一樣。

filter_word([Char|Rest], Char, Rest). 

filter([], _, []). 
filter([Word|Words], Char, [H|T]) :- 
    filter_word(Word, Char, H), 
    filter(Words, Char, T). 

這是一項家庭作業。

回答

0

它退出謂詞而不嘗試繼續處理列表中的下一個單詞(不是預期的),如在回溯並嘗試重做以下單詞中。

這是因爲filter中沒有條款來處理單詞與過濾器不匹配的情況。這個問題有三種情況:

  1. 空的清單。
  2. 非空,列表的第一個元素匹配過濾器。
  3. 非空,列表的第一個元素與過濾器不匹配。

您應該相應地寫出三個條款。

+0

非常好的解釋,它有點「彈出」我知道。它現在很好用。我不知道我是否應該在我的文章的解決方案中進行編輯,因爲這是一項家庭任務。 – dudzor

+0

如果您希望我們檢查一下,您可能也會如此,如果沒有的話,您的電腦就可以正常使用! :] – m09

+0

@dudzor:請不要在SO上發佈完整的作業分配解決方案。 –