Удаление из первого списка тех элементов, что отсутствуют во втором - Prolog

Узнай цену своей работы

Формулировка задачи:

Здравствуйте, подправьте программку пожалуйста. Задание звучит так: Напишите логическую программу удаления из первого списка тех элементов, что отсутствуют во втором. Вот чего я делаю:
Листинг программы
  1. domains
  2. namelist=name*
  3. name=symbol
  4. predicates
  5. append(namelist,namelist,namelist)
  6. is_a_member_of(name,namelist)
  7. split(name,namelist,namelist,namelist)
  8. clauses
  9. append([],L,L).
  10. append([X|L1],L2,[X|L3]):-append(L1,L2,L3).
  11. is_a_member_of(Name,[Name|_]).
  12. is_a_member_of(Name,[_|Tail]):-is_a_member_of(Name,Tail).
  13. split(Name,[H|Tail],[H|L1],L2):-H=Name,
  14. split(Name,Tail,L1,L2).
Понимаю что делаю что-то не так а вот что не понимаю. Исправьте пожалуйста

Решение задачи: «Удаление из первого списка тех элементов, что отсутствуют во втором»

textual
Листинг программы
  1. domains
  2.     namelist=name*
  3.     name=symbol
  4.    
  5. predicates
  6.     difference(namelist,namelist,namelist)
  7.     is_a_member_of(name,namelist)
  8. clauses
  9.     difference([],_,[]).
  10.     difference([H|T1], L2, L3):
  11.         -is_a_member_of(H, L2),!,
  12.         difference(T1, L2, L3).
  13.     difference([H|T1], L2, [H|T3]):
  14.         -difference(T1, L2, T3).

Объяснение кода листинга программы

В этом коде реализована функция difference для трех списков. Она удаляет из первого списка те элементы, которые отсутствуют во втором списке. В первой строке объявлено три списка: первый пустой список, второй и третий списки. Затем идут два утверждения:

  1. difference([],_,[]). - если первый список пустой, то результатом будет пустой список.
  2. difference([H|T1], L2, L3): - если в первом списке есть элементы, то идет попытка найти их во втором списке. Если элемент найден, то он удаляется из первого списка и поиск продолжается. Если элемент не найден, то он добавляется в третий список.
  3. difference([H|T1], L2, [H|T3]): - если в первом списке есть элементы, которые не найдены во втором списке, то они добавляются в третий список. В итоге, функция difference возвращает список, в котором удалены все элементы, которые присутствуют во втором списке.

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

15   голосов , оценка 4.067 из 5

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут
Похожие ответы