SWI Prolog条件语句
我正在尝试编写一个函数来测试单词hello是否包含在列表中。如果它被包含,我不希望它说“真”,我希望它说:“是的,你好这个词包含在这里”,有什么想法吗 这是我的密码: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
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).