Я новичок в Prolog. Я пытаюсь написать подмножество функций (Set, Subset), которое определяет, является ли Subset подмножеством Set (duh). Кроме того, если второй параметр не создается, он должен выводить все возможные подмножества. Прямо сейчас, он работает, когда оба параметра создаются, но когда я пытаюсь вывести все подмножества, он сталкивается с проблемой с элементом/2. Например:Prolog - Подмножество
?- subset([1,2,3], S).
S = [];
S = [1];
S = [1, 1];
S = [1, 1, 1];
...
Вот мой код:
% subset/2
% subset(Set, Subset) iff Subset is a subset of Set
subset(_, []).
subset(Set, [H|T]) :-
member(H, Set),
subset(Set, T).
в основном, как мне сделать так, чтобы член не держать собирание первого варианта в комплекте? Заранее спасибо.
«(duh)»: это довольно запутанно иметь такое имя: вместо этого следует учитывать 'set_subset (Set, Subset)'. – false
Обратите внимание, что 'iff' в вашем комментарии неточно, потому что' Set = any, Subset = [] 'и многие другие. Вместо этого скажите просто 'if' – false
Конечно,« iff »верен!Если это не «iff» и только «if», и поскольку, например, [1] не является подмножеством в [], мы получили бы неполную спецификацию, и предикату было бы позволено преуспеть в этом случае сбоя. Чтобы оперативно выполнять как успех, так и неудачу, вам нужно «iff». –