У меня есть код, который ДОЛЖЕН работать в теории, но это не так. У меня есть функция удаления, которая удаляет все вхождения a и возвращает новый список. Я называю это на каждом шаге и передаю новый список, добавляя голову. вот мой код, который возвращает false.Prolog remove all duplicates function
remv(a, [], []).
remv(a, [H|T], X) :- H=a, remv(a, T, X).
remv(a, [H|T],[H|X]):- remv(a, T, X).
%4
remvdub([],[]).
remvdub([H|T],[H|X]) :- remvdub(remv(H,T,A),X).
может кто-нибудь объяснить, в чем проблема?
Пролог использует предикаты, а не функции. Предикаты выражают отношения и всегда верны или ложны. Вы предполагаете, что 'remv/3' возвращает список, но это не тот случай. Вы должны попробовать изменить второе правило: 'remvdub ([H | T], [H | X]): - remv (H, T, T2), remvdub (T2, X) .'. Правила имеют следующий смысл: для списка '[H | T]' список '[H | X]' является начальным без двойников, если есть список 'T2', который является' T', без какого-либо появления 'H' и' X' - это список 'T2' без каких-либо удвоений. –
эта строка по-прежнему не возвращает правильный ответ. он все еще возвращает false –
Я вижу, что вы делали. По какой-то причине он не работает –