SWI Prolog条件语句

SWI Prolog条件语句,prolog,conditional-statements,Prolog,Conditional Statements,我正在尝试编写一个函数来测试单词hello是否包含在列表中。如果它被包含,我不希望它说“真”,我希望它说:“是的,你好这个词包含在这里”,有什么想法吗 这是我的密码: contains_hello([hello|_]). contains_hello([Head|Tail]):- Head \= hello, contains_hello(Tail). 这是未经测试的,但请尝试: contains_hello([hello|_]) :- write('yes, the word hello

我正在尝试编写一个函数来测试单词hello是否包含在列表中。如果它被包含,我不希望它说“真”,我希望它说:“是的,你好这个词包含在这里”,有什么想法吗

这是我的密码:

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中通常解决这个问题的方式

请注意,你的第二条完全排除了与第一条相匹配的情况。因此,删去第一条就方便多了。这就停止了回溯。即,如果第一条匹配,则不考虑第二条

切口由感叹号(
)表示。因此:


两种解决方案都打印“是”,此处包含“hello”一词。
contains_hello([hello|_]) :-
  write('yes, the word hello is contained here'), nl, !.

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