prolog中的集合运算
我有一篇研讨会论文,其中我必须在Prolog中找到一些关于集合的运算,例如子集:prolog中的集合运算,prolog,Prolog,我有一篇研讨会论文,其中我必须在Prolog中找到一些关于集合的运算,例如子集: subset([],V). subset([H|T1],[H|T2]):-subset(T1,T2). subset([H1|T1],[H2|T2]):- lt(H2,H1),subset([H1|T1],T2). 我很难找到其中的一些,所以如果有人写下来,我会非常感激: 检查元素是否为集合的成员 检查集合是否为空,el编号 现场 检查机组的所有el是否正常工作 数字 检查两套是否相同 查看SWI Prolog
subset([],V).
subset([H|T1],[H|T2]):-subset(T1,T2).
subset([H1|T1],[H2|T2]):- lt(H2,H1),subset([H1|T1],T2).
我很难找到其中的一些,所以如果有人写下来,我会非常感激:
- 检查元素是否为集合的成员
- 检查集合是否为空,el编号 现场
- 检查机组的所有el是否正常工作 数字
- 检查两套是否相同
listing/1
检查它们的源代码,例如
?- listing(subset).
lists:subset([], _) :- !.
lists:subset([A|C], B) :-
memberchk(A, B),
subset(C, B).
集合表示为列表,因此要检查成员,请使用member/2
;要检查集合是否为空,请检查集合是否与空列表相统一。要检查集合元素的性质,例如查看是否所有元素都是数字,您可以使用地图列表
:
?- maplist(number, [1, -1.2, 0]).
true.
如果两个集合是彼此的子集,则它们是等价的。在Prolog中,集合通常用列表表示。因此,您列出的第一个操作是列表上的
成员/2
谓词,第二个操作只是检查集合是否为空列表。一些重要的集合论运算包括:
- 集合A和集合B的并集:给出一个集合,其中包含A或B中的元素
- A和B的交集:给出一个包含A和B中元素的集合
- A和B的差异:给出一个包含A中元素而不包含B中元素的集合
union/3
和intersection/3
的描述在Kaarel的链接中。关于集合操作及其在Prolog中的实现的一些很好的讨论可以在这里找到: