У меня есть следующая функция из книги:
% Signature: select (X,HasXs,OneLessXs)/3
% purpose: The list OneLessXs is the result of removing
one occurrence of X from the list HasXs.
select(X,[X|Xs],Xs). *rule number 1*
select(X,[Y|Ys],[Y|Zs]) :- select(X,Ys,Zs). * rule number 2*
?- select(4,[2,3,2,4,5,2,4],X].
X=[2,3,2,5,2,4]
Но я не понял, как он находит правильный ответ. После того, как он удаляет все Y =! X, он приходит к правилу № 1 с: Xs=4,5,2,4
, затем возвращается true
. а что тогда? Если продолжить правило 2, то он также уберет следующую «4». Если он не продолжает правила 1, то как Zs [2,3,2,5,2,4]
? Я думаю, что мне не хватает основного правила.