Почему эта программа на Прологе возвращает истину И ложь?

Я новичок в Prolog и пытаюсь понять, почему эта очень простая программа возвращает 2 решения: истина И ложь. Для меня это должно возвращать только истину, зачем тоже возвращать ложь?

predicate1(_,[]).
predicate1(X,[_|T]) :- predicate1(X,T).

?- predicate1(abc,[]).

Спасибо за вашу помощь.


person Cristof    schedule 22.12.2019    source источник
comment
Об этом спрашивают много. Сначала поймите, что предикат не возвращает истину или ложь. Успех или неудача. Когда он добивается успеха и находит решение, он показывает true. Если он возвращается к точке выбора, чтобы найти другое решение, и не находит его, тогда он терпит неудачу (чтобы найти другое решение) \ и говорит false.   -  person lurker    schedule 23.12.2019


Ответы (1)


Ваша цель объединяется с первым предложением (фактом) для предиката:

?- predicate1(abc,[]) = predicate1(_,[]).
true.

Таким образом, запрос возвращает true в качестве первого результата. Но точка выбора создается, поскольку есть второе предложение (правило) для предиката. Если объединить цель и заголовок правила не удается, вы получите false при запросе второго решения:

?- predicate1(abc,[]) = predicate1(X,[_|T]).
false.
person Paulo Moura    schedule 22.12.2019