операции с множествами в прологе - PullRequest
1 голос
/ 28 мая 2011

У меня есть документ для семинара, где я должен найти некоторые операции с наборами в Прологе, например, для подмножества:

subset([],V).
subset([H|T1],[H|T2]):-subset(T1,T2).
subset([H1|T1],[H2|T2]):- lt(H2,H1),subset([H1|T1],T2).

У меня проблемы с поиском некоторых из них, поэтому я был бы очень благодарен, есликто-нибудь записывает их:

  • проверить, является ли элемент членом множества
  • проверить, если множество пусто, число el в наборе
  • проверить, все ли элементыиз набора являются номера
  • проверка, совпадают ли два набора

Ответы [ 2 ]

2 голосов
/ 28 мая 2011

Ознакомьтесь с разделом библиотека (списки): манипулирование списками в руководстве SWI-Prolog.Попробуйте перечисленные там специфичные для набора предикаты и проверьте их исходный код, используя listing/1, например,

?- listing(subset).
lists:subset([], _) :- !.
lists:subset([A|C], B) :-
    memberchk(A, B),
    subset(C, B).

Наборы представлены в виде списков, поэтому для проверки членов используйте member/2, чтобы проверить, установлен ли наборпусто, проверьте, объединяется ли оно с пустым списком.Чтобы проверить природу элементов набора, например, чтобы увидеть, все ли числа, вы можете использовать maplist:

?- maplist(number, [1, -1.2, 0]).
true.

Два набора эквивалентны, если они являются подмножествами друг друга.

1 голос
/ 28 мая 2011

В Прологе набор обычно представлен списком.Итак, вашей первой перечисленной операцией является предикат member/2 в списке, вторая просто проверяет, является ли набор пустым списком или нет.Вот некоторые важные теоретико-множественные операции:

  • объединение множества A и множества B: предоставление набора, содержащего элементы либо в A, либо в B.
  • пересечение для A и B: предоставление набора, содержащего элементы как в A, так и в B.
  • разница в A и B: предоставление набора, содержащего элементы в A и нев Б.

Некоторые из этих операций являются стандартными операциями, например, описание union/3 и intersection/3 в ссылке Каарела.Хорошее обсуждение операций над множествами и их реализации в Прологе можно найти здесь: http://kti.mff.cuni.cz/~bartak/prolog/sets.html.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...