列表列表中是否存在某个元素?

2024-03-05

我想查找给定元素是否存在于列表列表中。只有当该元素存在于列表的第一个列表中的某处时,我才得到正确的结果。

有什么建议吗?

memberlist(X,[[X|T1]|T2]).
memberlist(X,[[H|T1]|T2]) :-
  memberlist(X,[T1|T2]).

memberlists(X, Xss) :-
   member(Xs, Xss),
   member(X, Xs).

如同member/2,这会产生许多冗余答案,例如:

?- memberlists(X, [[a,a],[a],[a]]).
   X = a
;  X = a  % redundant
;  X = a  % redundant
;  X = a. % redundant

或者,您可能想使用memberd/2 https://stackoverflow.com/a/21971885代替member/2.

memberlists2(X, Xss) :-
   memberd(Xs, Xss),
   memberd(X, Xs).

?- memberlists2(X, [[a,a],[a],[a]]).
   X = a
;  X = a   % redundant
;  false.

这好多了,但仍然没有删除所有多余的答案。

对于消除所有此类冗余的解决方案,已经设置了赏金。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

列表列表中是否存在某个元素? 的相关文章

随机推荐