2009-11-17 144 views
2

我正在嘗試編寫一個函數,用於測試查看單詞hello是否包含在列表中。如果它被包含,我不希望它說「真實」,我希望它說:「是的,你好這個詞包含在這裏」,任何想法?SWI-Prolog條件語句

這裏是我的代碼:

contains_hello([hello|_]). 
contains_hello([Head|Tail]):- Head \= hello, contains_hello(Tail). 

回答

3

這是未經測試,但嘗試:

contains_hello([hello|_]) :- 
    write('yes, the word hello is contained here'), 
    nl. 
contains_hello([Head|Tail]) :- Head \= hello, contains_hello(Tail). 
+0

作品完美 - 謝謝! – rb58 2009-11-17 17:00:14

+0

這兩個解決方案打印 是的,這個詞你好在這裏包含 是真的。 – 2009-11-18 04:56:21

4

顯然表格代碼,您只需要打印一次消息。目前,您可以通過在第二個條款中添加Head \= hello來解決此問題。這並不是人們通常在Prolog中解決這個問題的方法。

請注意,您的第二個條款恰恰排除了第一個條款匹配的情況。因此,在第一個條款中剪切要方便得多。這會停止回溯。即,如果第一個子句匹配,則不考慮第二個子句。

切割由感嘆號(!)表示。因此:

contains_hello([hello|_]) :- 
    write('yes, the word hello is contained here'), nl, !. 

contains_hello([_|T]) :- contains_hello(T).