我对Prolog不太熟悉。我正在尝试编写一个函数subset(Set, Subset),以确定Subset是否是Set的子集(显然)。此外,如果第二个参数未实例化,则应输出所有可能的子集。目前,当两个参数都实例化时,它可以正常工作,但是当我尝试输出所有子集时,它会遇到member/2的问题。例如:
?- 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).
如何使成员不会一直选择Set中的第一个选项?
set_subset(Set, Subset)
。 - falseiff
并不准确,因为Set = any, Subset = []
等情况下也成立。 因此,请简单使用if
代替。 - false