如何在没有内置谓词的情况下比较两个列表?

时间:2019-04-16 06:03:17

标签: prolog

我有一个任务是在执行时获取列表,如果列表中至少有一个匹配的元素显示为false,否则比较列表为真

我尝试了一些内置函数,但是如果没有它们,我将无法对其进行整理。

有人可以帮忙吗?

预期结果:

Set([1,2],[3,1]).
false

Set([2,3,4],[1,5,6]).
true

1 个答案:

答案 0 :(得分:1)

disjoint(Xs, Ys) :-
   maplist(list_without(Ys), Xs).

list_without([], _).
list_without([X|Xs], E) :-
   dif(X, E),
   list_without(Xs, E).

或者没有地图列表:

disjoint(Xs, Ys) :-
   all_without(Xs, Ys).

all_without([], _).
all_without([X|Xs], Ys) :-
   list_without(Ys, X),
   all_without(Xs, Ys).