Причина, по которой это происходит, заключается в том, что все подчеркивания _
являются безымянными переменными. Использование их дважды в одном и том же предложении не приводит к объединению двух, это разные переменные. Таким образом, вы можете дать им имя:
removeSpecific(_, [], [], 0).
removeSpecific(Element, [Element|Tail], Tail1, NumToDelete):-
NewNumDelete is NumToDelete-1,
removeSpecific(Element, Tail, Tail1, NewNumDelete).
removeSpecific(Element, [<b>Head</b>|Tail], [<b>Head</b>|Tail1], NumToDelete):-
removeSpecific(Element, Tail, Tail1, NumToDelete).
Для данного примера запроса это дает нам:
?- removeSpecific(4, [2,4,5,3,4,4], NewList, 2).
NewList = [2, 5, 3, 4] ;
NewList = [2, 5, 3, 4] ;
NewList = [2, 4, 5, 3] ;
false.
Первый результат удалит первые два 4
s, второй первый и последний 4
с, а последний ответ удаляет последние два 4
с.