2009-11-17 101 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).