检查两个列表是否具有公共元素

马蒂姆·科雷亚(Martim Correia)

因此,基本上,我有一个称为common_elements(List1,List2)的谓词,该谓词的目的是检查List1是否至少具有属于List2的元素。

例:

?- common_elements([1,2,3,4,5,6],[6]).
true.

?- common_elements([1,2,3],[2]).
true.

?- common_elements([1,2,3],[6]).
false.

?- common_elements([P1,P2,P3,P4,P5,P6],[P7,P8,P6]).
true.

因此,对于数字来说,这很好用,但是如果我输入变量,它将统一变量,而不是检查它们是否在第二个列表中。

例:

?- common_elements([1,2,3],[2]).
true.

?- common_elements([1,2,3],[6]).
false.

?- common_elements([P1,P2,P3,P4,P5,P6],[P7,P8,P6]).
P1 = P7.

因此,正如您所看到的,它可以很好地工作,但是由于某种原因,如果类型变量将它们统一起来,而不是仅仅比较它们而似乎不明白为什么。

程序:

common_elements(L1,L2) :- common_elements(L1,L2,[]).

common_elements([],_,AC) :- length(AC,C),
                            C >= 1.

common_elements([P|_],L2,AC) :- member(P,L2),!,
                                append(AC,[P],NAC),
                                common_elements([],L2,NAC).

common_elements([P|R],L2,AC) :- \+ member(P,L2),!,
                                common_elements(R,L2,AC).

威廉·范昂塞姆

member/2谓词将执行统一。实际上,例如:

?- member(P1, [P2]).
P1 = P2.

您可以利用==/2避免统一,因此:

如果Term1等于则为True Term2变量仅与共享变量相同

因此,我们可以在这里执行以下操作:检查一个变量是否等效于另一个变量:

membereq(X, [H|_]) :-
    X == H.
membereq(X, [_|T]) :-
    membereq(X, T).

然后我们可以检查:

common_elements([H|_], L2) :-
    membereq(H, L2).
common_elements([_|T], L2) :-
    common_elements(T, L2).

然后,使用以下命令回答查询:

?- common_elements([1,2,3,4,5,6],[6]).
true ;
false.

?- common_elements([1,2,3,4,5,6],[6]).
true ;
false.

?- common_elements([1,2,3],[2]).
true ;
false.

?- common_elements([1,2,3],[6]).
false.

?- common_elements([P1,P2,P3,P4,P5,P6],[P7,P8,P6]).
true ;
false.

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

检查两个列表是否具有相同的元素

来自分类Dev

检查两个元素在C ++中是否具有公共元素

来自分类Dev

检查两个列表是否具有相同的项目

来自分类Dev

Prolog-检查两个列表中除一个列表外是否具有相同的元素

来自分类Dev

检查具有相同类的两个元素的两个 ID 是否相等

来自分类Dev

给定N个排序的数组,请检查是否有两个包含至少两个公共元素的数组

来自分类Dev

jQuery检查两个数组是否至少有一个公共元素

来自分类Dev

具有两个元素的列表

来自分类Dev

两个列表之间没有重复的公共元素

来自分类Dev

检查两个列表中是否具有相同的元素,并且顺序相同,但是在Python中具有其他起点

来自分类Dev

列表之间的两个公共元素

来自分类Dev

jQuery检查锚列表中的锚是否具有两个类

来自分类Dev

检查列表的两个值是否具有相同的数字,返回多少相同

来自分类Dev

检查列表中是否有两个值

来自分类Dev

检查两个集合是否有一个带有玩笑的公共成员

来自分类Dev

具有顺序限制的两个列表的元素的排列

来自分类Dev

Scala:获取具有两个限制的列表元素

来自分类Dev

如何在python中检查两个列表之间的公共元素

来自分类Dev

检查2个列表是否具有相等的元素Haskell

来自分类Dev

检查2个列表是否具有相等的元素Haskell

来自分类Dev

元素相同的两个列表中的公共元素

来自分类Dev

检查两个列表中的元素

来自分类Dev

检查两个列表中的元素

来自分类常见问题

检查两个列表是否相等

来自分类Dev

两个列表之间的公共元素并保留两个列表中元素的顺序

来自分类Dev

两个列表之间的重复项/公共元素

来自分类Dev

如何从两个列表中检测公共元素?

来自分类Dev

有没有办法检查两个数组是否具有相同的元素?

来自分类Dev

两个元素元组的列表转换为具有相同元素的元组列表

Related 相关文章

  1. 1

    检查两个列表是否具有相同的元素

  2. 2

    检查两个元素在C ++中是否具有公共元素

  3. 3

    检查两个列表是否具有相同的项目

  4. 4

    Prolog-检查两个列表中除一个列表外是否具有相同的元素

  5. 5

    检查具有相同类的两个元素的两个 ID 是否相等

  6. 6

    给定N个排序的数组,请检查是否有两个包含至少两个公共元素的数组

  7. 7

    jQuery检查两个数组是否至少有一个公共元素

  8. 8

    具有两个元素的列表

  9. 9

    两个列表之间没有重复的公共元素

  10. 10

    检查两个列表中是否具有相同的元素,并且顺序相同,但是在Python中具有其他起点

  11. 11

    列表之间的两个公共元素

  12. 12

    jQuery检查锚列表中的锚是否具有两个类

  13. 13

    检查列表的两个值是否具有相同的数字,返回多少相同

  14. 14

    检查列表中是否有两个值

  15. 15

    检查两个集合是否有一个带有玩笑的公共成员

  16. 16

    具有顺序限制的两个列表的元素的排列

  17. 17

    Scala:获取具有两个限制的列表元素

  18. 18

    如何在python中检查两个列表之间的公共元素

  19. 19

    检查2个列表是否具有相等的元素Haskell

  20. 20

    检查2个列表是否具有相等的元素Haskell

  21. 21

    元素相同的两个列表中的公共元素

  22. 22

    检查两个列表中的元素

  23. 23

    检查两个列表中的元素

  24. 24

    检查两个列表是否相等

  25. 25

    两个列表之间的公共元素并保留两个列表中元素的顺序

  26. 26

    两个列表之间的重复项/公共元素

  27. 27

    如何从两个列表中检测公共元素?

  28. 28

    有没有办法检查两个数组是否具有相同的元素?

  29. 29

    两个元素元组的列表转换为具有相同元素的元组列表

热门标签

归档