prolog中的多集包含函数
我想写一个prolog程序,检查一个列表是否包含在其他列表中prolog中的多集包含函数,prolog,Prolog,我想写一个prolog程序,检查一个列表是否包含在其他列表中 多种元素很重要 这是我写的,但输入失败-包含([a,b,b,d],[a,b,b,c,c,d,d])。这应该返回true。其他示例-包含([a,b,b,d],[a,b,b,c,c,d,d]) 应该返回false inclusion([],_). inclusion([X|L],Set):- member(X,Set),delete(Set,X,Set2), inclusion(L,Set2). 上面是我写的代码。逻辑
多种元素很重要
这是我写的,但输入失败-
包含([a,b,b,d],[a,b,b,c,c,d,d])。
这应该返回true。其他示例-包含([a,b,b,d],[a,b,b,c,c,d,d])
应该返回false
inclusion([],_).
inclusion([X|L],Set):-
member(X,Set),delete(Set,X,Set2), inclusion(L,Set2).
上面是我写的代码。逻辑检查第一个元素是否在集合中然后从集合中删除该元素,并检查剩余列表是否在集合中
但这似乎不起作用此谓词不适用于第一个列表中多次出现的条目,因为
delete
会删除Set
的所有外观。使用选择
仅删除匹配的第一个元素:
inclusion([],_).
inclusion([X|L],Set):-
member(X,Set),select(X, Set, Set2), inclusion(L,Set2).
给你:
?- inclusion([a,b,b,d],[a,b,b,c,c,d,d]).
true .
?- inclusion([a,b,b,b,d],[a,b,b,c,c,d,d]).
false.