Определить, является ли первый список подмножеством второго - Prolog
Формулировка задачи:
Определить, является ли первый список подмножеством второго. Списки не имеют дубликатов.
Аргументы: первый список;
второй список.
?- pred([a,b,c],[s,a,e,c,d,b]).
yes
?-
Решение задачи: «Определить, является ли первый список подмножеством второго»
textual
Листинг программы
domains ch=char chl=ch* predicates is_in(ch,chl) is_subset(chl,chl) clauses is_in(_,[]):-fail. is_in(X,[X|_]):- !. is_in(X,[Y|T]):- X<>Y, is_in(X,T). is_subset([],_):- !. is_subset([X|T],Y) :- is_in(X,Y), is_subset(T,Y).
Объяснение кода листинга программы
domains
- определяет типы данных для переменныхpredicates
- определяет функции, которые будут использоваться в программеclauses
- определяет правила, которые определяют поведение программыis_in(ch,chl)
- функция, которая проверяет, есть ли символ в списке символовis_subset(chl,chl)
- функция, которая проверяет, является ли один список подмножеством другогоis_in(_,[]):-fail.
- если пустой список не содержит символ, то возвращается ошибкаis_in(X,[X|_]):- !.
- если символ есть в начале списка, то возвращается успехis_in(X,[Y|T]):- X<>Y, is_in(X,T).
- если символ не равен символу в начале списка, то рекурсивно вызывается функция для оставшейся части спискаis_subset([],_):- !.
- если пустой список не содержит символов, то возвращается успехis_subset([X|T],Y) :- is_in(X,Y), is_subset(T,Y).
- если символ из первого списка есть во втором списке, то рекурсивно вызывается функция для оставшейся части первого списка
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д