Предикатные вызовы в Прологе не «возвращают false / true»;они успешны (необязательно обязательные переменные) или терпят неудачу .И они могут преуспеть многократно.
Ответ на ваш вопрос зависит от того, как вы позвоните predicate
.Предполагая, что это само по себе цель, и вы передаете ему список, не содержащий несвязанных переменных, например, ?- predicate([a,b,c,d])
, это произойдет:
member(X,[a,b,c,d])
сначала успешно с X=a
.Затем вызывается someCalculations(a)
.
В случае успеха вызов predicate([a,b,c,d])
также выполняется успешно, без привязки каких-либо переменных.Вы можете остановиться или запросить дополнительные результаты, в этом случае ...
В случае неудачи пролог возвращается и ...
... X
привязывается к b
, вызывается someCalculations(b)
.И т. Д.
После шага 4 (с d
), вызов member
завершается неудачно, так же как и вызов predicate
(someCalculations
не вызывается).