我正在尝试编写一个函数,用于测试查看单词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