Из вашего кода ясно, что вы хотите, чтобы сообщение печаталось только один раз . В настоящее время вы решаете это, добавляя Head \= hello
ко второму предложению. Обычно это не решается в Прологе.
Обратите внимание, что ваше второе предложение исключает именно ту ситуацию, которая соответствует первому предложению. Итак, гораздо удобнее вырезать в первом предложении. Это прекращает возвращаться. То есть, если первое предложение совпадает, то второе предложение не будет рассматриваться.
Сокращение обозначено восклицательным знаком (!
). Таким образом:
contains_hello([hello|_]) :-
write('yes, the word hello is contained here'), nl, !.
contains_hello([_|T]) :- contains_hello(T).