Разность списков (?) Prolog 2.0
Формулировка задачи:
Задача: Переписать из 1 списка во 2 список те элементы, которых нет в 3 списке.
Написала так:
Почему-то ругается на анонимную переменную в первом клозе.
Решение задачи: «Разность списков (?) Prolog 2.0»
textual
Листинг программы
DOMAINS L=integer* X=integer PREDICATES pred(L,L,L) member(X,L) CLAUSES pred([],[],_). pred([H|T1],[H|T2],L):- not(member(H,L)),!, pred(T1,T2,L). pred([_|T],L1,L2):- !, pred(T,L1,L2). member(H,[H|_]). member(H,[_|T]):- member(H,T).
Объяснение кода листинга программы
domains- определения доменов:L- список целых чиселX- целое число
predicates- определения предикатов:pred- предикат, принимающий три аргумента: список, элемент, результат
clauses- определения правил (условий) для предикатаpred:- Первое правило: если список пустой, то результат будет пустым списком (
[]) - Второе правило: если первый элемент списка
Hне содержится в спискеL, то рекурсивно вызываетсяpredдля оставшегося спискаT1и нового спискаT2безH - Третье правило: если первый элемент списка
Hотсутствует, то рекурсивно вызываетсяpredдля оставшегося спискаT
- Первое правило: если список пустой, то результат будет пустым списком (
member- предикат, определяющий, является ли элементXчастью спискаL:- Первое правило: если
Xравен первому элементу спискаH, то он является членом списка - Второе правило: если
Xне является первым элементом спискаH, то рекурсивно вызываетсяmemberдля оставшегося спискаTВ итоге, данный код реализует рекурсивную функцию для нахождения разности двух списков, исключая повторяющиеся элементы.
- Первое правило: если