Удаление заданного элемента из списка Prolog
Программа должна находить значение (A_max+A_min+A_cp)/3, где A1,A2,A3…AN элементы списка. И удалять все вхождения элементов, совпадающие с полученным значением.
min([Min], Min).
min([H1, H2|T], Min):- H1 =< H2, min([H1|T], Min).
min([H1, H2|T], Min):- H1 > H2, min([H2|T], Min).
max([Max],Max).
max([H1, H2|T], Max):- H1 >= H2, max([H1|T], Max).
max([H1, H2|T], Max):- H1 < H2, max([H2|T], Max).
sum([], T,T).
sum(H, T):-sum(H, 0, T).
sum([H|T],Sum, Element):- Sum2 is Sum + H, sum(T,Sum2, Element).
elem([], T,T).
elem(H, A):-elem(H, 0, A).
elem([_|T],Sum, Element):- Sum2 is Sum + 1, elem(T,Sum2, Element).
answer([H|T], Ans):-elem([H|T], Elem), sum([H|T],Sum), min([H|T], Min), max([H|T], Max),
Ans is ((Min + Max + (Sum/Elem))/3).
delete(_,[],[]).
delete(X,[X|T],T1):-delete(X,T,T1),!.
delete(X,[Y|T],[Y|T1]):-delete(X,T,T1).
И это все даже работает. Но только по отдельности, т.е.
?-answer([1,2,3],X),write(X),nl.
?-X is 2, delete(X,[1,2,3],S), write(S), nl.
Если сразу передать параметр, то выведется просто исходный список.
?-answer([1,2,3],X), delete(X,[1,2,3],S), write(S), nl.
Помогите, пожалуйста, найти ошибку