我試圖做一個序言功能。該函數讀入一個句子,然後嘗試提取一個關鍵詞。如果找到關鍵詞,則會打印一條消息。如果沒有找到關鍵字,我希望它也能打印一條消息。這裏是我的例子:SWI Prolog - 條件NOT?
contains([word1|_]) :- write('word1 contained').
contains([Head|Tail]) :- Head \= word1, contains(Tail).
contains([word2|_]) :- write('word2 contained').
contains([Head|Tail]) :- Head \= word2, contains(Tail).
contains([word3|_]) :- write('word3 contained').
contains([Head|Tail]) :- Head \= word3, contains(Tail).
上述代碼將檢查並看看提取的單詞是否存在。但如果不包含單詞「word1,word2或word3」,它不會給出答案。有誰知道我應該怎麼去實現這個?
我嘗試添加:
contains([_|_]) :- write('nothing contained'),nl.
contains([Head|Tail]) :- Head \= _, contains(Tail).
但顯然這是錯誤的做法。
使用削減不被認爲是好的。 – liori 2009-11-23 15:04:16
那麼,使用切割確實意味着你的程序不再是一個純粹的邏輯程序,它們當然可以使閱讀和調試代碼變得痛苦,但是在適當的時候使用它們可以產生更簡潔和高效的代碼。在編寫效率受到關注的大型代碼庫時,他們難以避免。 – nedned 2009-11-23 15:31:32
另外,使用'write'意味着該程序不是完全合乎邏輯的。 – bcat 2009-11-24 00:35:07