Разность списков (?) Prolog 2.0

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

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

Задача: Переписать из 1 списка во 2 список те элементы, которых нет в 3 списке. Написала так:
Листинг программы
  1. DOMAINS
  2. L=integer*
  3. X=integer
  4. PREDICATES
  5. diz(L,L,L)
  6. member(X,L)
  7. CLAUSES
  8. diz([],_,[]).
  9. diz([H|T1],L,[H|T2]):- member(H,L), diz(T1,L,T2).
  10. diz([_|T],L1,L2):- diz(T,L1,L2).
  11. member(H,[H|_]).
Почему-то ругается на анонимную переменную в первом клозе.

Решение задачи: «Разность списков (?) Prolog 2.0»

textual
Листинг программы
  1. DOMAINS
  2. L=integer*
  3. X=integer
  4.  
  5. PREDICATES
  6. pred(L,L,L)
  7. member(X,L)
  8.  
  9. CLAUSES
  10. pred([],[],_).
  11. pred([H|T1],[H|T2],L):- not(member(H,L)),!,
  12.             pred(T1,T2,L).
  13. pred([_|T],L1,L2):- !, pred(T,L1,L2).
  14.  
  15. member(H,[H|_]).
  16. member(H,[_|T]):- member(H,T).

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

  1. domains - определения доменов:
    • L - список целых чисел
    • X - целое число
  2. predicates - определения предикатов:
    • pred - предикат, принимающий три аргумента: список, элемент, результат
  3. clauses - определения правил (условий) для предиката pred:
    • Первое правило: если список пустой, то результат будет пустым списком ([])
    • Второе правило: если первый элемент списка H не содержится в списке L, то рекурсивно вызывается pred для оставшегося списка T1 и нового списка T2 без H
    • Третье правило: если первый элемент списка H отсутствует, то рекурсивно вызывается pred для оставшегося списка T
  4. member - предикат, определяющий, является ли элемент X частью списка L:
    • Первое правило: если X равен первому элементу списка H, то он является членом списка
    • Второе правило: если X не является первым элементом списка H, то рекурсивно вызывается member для оставшегося списка T В итоге, данный код реализует рекурсивную функцию для нахождения разности двух списков, исключая повторяющиеся элементы.

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


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

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

13   голосов , оценка 4.154 из 5

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

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

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