Удаление из первого списка тех элементов, что отсутствуют во втором - Prolog
Формулировка задачи:
Здравствуйте, подправьте программку пожалуйста.
Задание звучит так:
Напишите логическую программу удаления из первого списка тех элементов, что отсутствуют во втором.
Вот чего я делаю:
Понимаю что делаю что-то не так а вот что не понимаю. Исправьте пожалуйста
Листинг программы
- domains
- namelist=name*
- name=symbol
- predicates
- append(namelist,namelist,namelist)
- is_a_member_of(name,namelist)
- split(name,namelist,namelist,namelist)
- clauses
- append([],L,L).
- append([X|L1],L2,[X|L3]):-append(L1,L2,L3).
- is_a_member_of(Name,[Name|_]).
- is_a_member_of(Name,[_|Tail]):-is_a_member_of(Name,Tail).
- split(Name,[H|Tail],[H|L1],L2):-H=Name,
- split(Name,Tail,L1,L2).
Решение задачи: «Удаление из первого списка тех элементов, что отсутствуют во втором»
textual
Листинг программы
- domains
- namelist=name*
- name=symbol
- predicates
- difference(namelist,namelist,namelist)
- is_a_member_of(name,namelist)
- clauses
- difference([],_,[]).
- difference([H|T1], L2, L3):
- -is_a_member_of(H, L2),!,
- difference(T1, L2, L3).
- difference([H|T1], L2, [H|T3]):
- -difference(T1, L2, T3).
Объяснение кода листинга программы
В этом коде реализована функция difference
для трех списков. Она удаляет из первого списка те элементы, которые отсутствуют во втором списке.
В первой строке объявлено три списка: первый пустой список, второй и третий списки.
Затем идут два утверждения:
difference([],_,[]).
- если первый список пустой, то результатом будет пустой список.difference([H|T1], L2, L3):
- если в первом списке есть элементы, то идет попытка найти их во втором списке. Если элемент найден, то он удаляется из первого списка и поиск продолжается. Если элемент не найден, то он добавляется в третий список.difference([H|T1], L2, [H|T3]):
- если в первом списке есть элементы, которые не найдены во втором списке, то они добавляются в третий список. В итоге, функцияdifference
возвращает список, в котором удалены все элементы, которые присутствуют во втором списке.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д