Создать предикат проекции множества - 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-ки и стандартный предикат "быть элементом списка".
Пролог ругается на предикат sProj, что не определена переменная.
И ругается на первое и третье правило bProj_1.
Как правильно сделать, используя отсечения, чтоб и эффективно было.
Решение задачи: «Создать предикат проекции множества»
textual
Листинг программы
?- X =.. [(1,2,3)]. X = (1, 2, 3). ?- X =.. [a,(1,2,3)]. X = a((1, 2, 3)). ?- X =.. [1,2,3]. ERROR: =../2: Type error: `atom' expected, found `1'
Объяснение кода листинга программы
- В первом предложении задаётся вопрос на вывод переменной X, которая является списком кортежей.
- Во втором предложении задаётся вопрос на вывод переменной X, которая является списком с одним элементом — кортежем (1,2,3).
- В третьем предложении задаётся вопрос на вывод переменной X, которая является списком с одним элементом — строкой
a
. - В четвёртом предложении задаётся вопрос на вывод переменной X, которая является списком с одним элементом — строкой
1
. - В пятом предложении выводится сообщение об ошибке, так как переменная
1
не является атомом, а списки могут содержать только атомы.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д