Создать предикат проекции множества - Prolog

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

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

Помогите, пожалуйста, правильно составить предикат. Проекция множества - это операция, применяемая к множеству n-арных отношений и возвращает множество всех элементов, стоящих на k-ом месте всех n-ок - элементов исходного множества. Например: А = [("func07","func01"),("func05","func05"),("func03","func04"),("func01","func01"),("func07","func08"),("func01","func04"), ("func01","func05")] Proj(1,A) = ["func07","func05","func03","func01","func07"] Proj(2,A) = ["func01","func05","func04","func08"] Пробовал реализовать на PDC Prolog через рекурсию без параметризации, введя дополнительный предикат "малая проекция" - возвращает элемент n-ки и стандартный предикат "быть элементом списка".
Листинг программы
  1. Domains
  2. x = string
  3. h1 = h1(x,x)
  4. h2 = h1*
  5. h3 = x*
  6. Predicates
  7. sProj_1(h1,x)
  8. bProj_1(h2,h3)
  9. Clauses
  10. sProj_1(h1(A,_),A).
  11. bProj_1(h2([]),_).
  12. bProj_1(h2([H|T]),h3(A)) :- sProj_1(H,B), isElem(B,h3(A)), bProj_1(h2(T),h3(A)).
  13. bProj_1(h2([H|T]),h3(A)) :- sProj_1(H,B), not(isElem(B,h3(A))), bProj_1(h2(T),h3([B|A])).
Пролог ругается на предикат sProj, что не определена переменная. И ругается на первое и третье правило bProj_1. Как правильно сделать, используя отсечения, чтоб и эффективно было.

Решение задачи: «Создать предикат проекции множества»

textual
Листинг программы
  1. ?- X =.. [(1,2,3)].
  2. X = (1, 2, 3).
  3.  
  4. ?- X =.. [a,(1,2,3)].
  5. X = a((1, 2, 3)).
  6.  
  7. ?- X =.. [1,2,3].
  8. ERROR: =../2: Type error: `atom' expected, found `1'

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

  1. В первом предложении задаётся вопрос на вывод переменной X, которая является списком кортежей.
  2. Во втором предложении задаётся вопрос на вывод переменной X, которая является списком с одним элементом — кортежем (1,2,3).
  3. В третьем предложении задаётся вопрос на вывод переменной X, которая является списком с одним элементом — строкой a.
  4. В четвёртом предложении задаётся вопрос на вывод переменной X, которая является списком с одним элементом — строкой 1.
  5. В пятом предложении выводится сообщение об ошибке, так как переменная 1 не является атомом, а списки могут содержать только атомы.

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


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

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

12   голосов , оценка 4.167 из 5

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

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

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