Разность списков (?) 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
В итоге, данный код реализует рекурсивную функцию для нахождения разности двух списков, исключая повторяющиеся элементы.
- Первое правило: если
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д