Удаление всех вхождений элемента из списка
Пытаясь написать процедуру, которая дала бы значение и список, он удаляет все вхождения этого значения в список и пишет:
delMember(X, [], []) :- !.
delMember(X, [X|Xs], Y) :- !, delMember(X, Xs, Y).
delMember(X, [T|Xs], Y) :- !, delMember(X, Xs, Y2), append([T], Y2, Y).
Посколькуcut
этот кодcannot правильно отвечать на запросы, такие как:
delMember(Y, [1,2,3,1,2,3,1,2,3], [1, 2, 1, 2, 1, 2 ]).
Если я удалю порезы:
delMember(X, [], []).
delMember(X, [X|Xs], Y) :- delMember(X, Xs, Y).
delMember(X, [T|Xs], Y) :- delMember(X, Xs, Y2), append([T], Y2, Y).
это терпит неудачу в запросах как:
delMember(Y, [1,2,3,1,2,3,1,2,3], [1,2,3,1,2,3,1,2,3]).
(возвратыtrue
когда правильный ответfalse
).
Как я могу сделать это работает в обеих ситуациях?
Может быть, я могу проверить этоX is not T
в третьей строке кода я попытался:
delMember(X, [T|Xs], Y) :- not(X = T), delMember(X, Xs, Y2), append([T], Y2, Y).
Но это не работает.