我正在嘗試編寫一個函數,用於測試查看單詞hello是否包含在列表中。如果它被包含,我不希望它說「真實」,我希望它說:「是的,你好這個詞包含在這裏」,任何想法?SWI-Prolog條件語句
這裏是我的代碼:
contains_hello([hello|_]).
contains_hello([Head|Tail]):- Head \= hello, contains_hello(Tail).
我正在嘗試編寫一個函數,用於測試查看單詞hello是否包含在列表中。如果它被包含,我不希望它說「真實」,我希望它說:「是的,你好這個詞包含在這裏」,任何想法?SWI-Prolog條件語句
這裏是我的代碼:
contains_hello([hello|_]).
contains_hello([Head|Tail]):- Head \= hello, contains_hello(Tail).
這是未經測試,但嘗試:
contains_hello([hello|_]) :-
write('yes, the word hello is contained here'),
nl.
contains_hello([Head|Tail]) :- Head \= hello, contains_hello(Tail).
顯然表格代碼,您只需要打印一次消息。目前,您可以通過在第二個條款中添加Head \= hello
來解決此問題。這並不是人們通常在Prolog中解決這個問題的方法。
請注意,您的第二個條款恰恰排除了第一個條款匹配的情況。因此,在第一個條款中剪切要方便得多。這會停止回溯。即,如果第一個子句匹配,則不考慮第二個子句。
切割由感嘆號(!
)表示。因此:
contains_hello([hello|_]) :-
write('yes, the word hello is contained here'), nl, !.
contains_hello([_|T]) :- contains_hello(T).
作品完美 - 謝謝! – rb58 2009-11-17 17:00:14
這兩個解決方案打印 是的,這個詞你好在這裏包含 是真的。 – 2009-11-18 04:56:21