【发布时间】:2014-11-22 22:25:52
【问题描述】:
我对 Prolog 有点陌生。我正在尝试编写一个函数子集(Set,Subset)来确定 Subset 是否是 Set 的子集(duh)。此外,如果第二个参数没有实例化,它应该输出每个可能的子集。现在,它在两个参数都被实例化时工作,但是当我试图输出所有子集时,它遇到了 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 中的第一个选项?
【问题讨论】:
-
"(duh)": 有这样一个名字很令人困惑:考虑
set_subset(Set, Subset)。 -
请注意,您评论中的
iff并不准确,因为Set = any, Subset = []等等。相反,简单地说if -
Subsets in Prolog的可能重复
标签: prolog