相关疑难解决方法(0)

PROLOG:如果顺序无关紧要,确定列表中的元素是否相等

我试图找出一种方法来检查两个列表是否相等,无论它们的元素顺序如何.

我的第一次尝试是:

areq([],[]).
areq([],[_|_]).
areq([H1|T1], L):- member(H1, L), areq(T1, L).
Run Code Online (Sandbox Code Playgroud)

但是,这只检查左侧列表中的所有元素是否都存在于右侧列表中; 意思areq([1,2,3],[1,2,3,4]) => true.在这一点上,我需要找到一种能够以双向意义测试事物的方法.我的第二次尝试如下:

areq([],[]).
areq([],[_|_]).
areq([H1|T1], L):- member(H1, L), areq(T1, L), append([H1], T1, U), areq(U, L).
Run Code Online (Sandbox Code Playgroud)

在哪里我会尝试重建左边的那个以及最后的交换列表; 但这次失败了.

我对递归的感觉非常差,根本不知道如何改进它,尤其是Prolog.任何提示或建议都将在此时受到赞赏.

prolog

13
推荐指数
4
解决办法
3721
查看次数

如何在 Prolog 中检查一个列表的所有元素是否是另一个列表的成员

我现在正在学习Prolog,递归思维对我来说很难。

我有两个列表,例如L1=[1,2,3]L2=[3,1,2]我应该检查 的所有元素是否L1都包含在L2

所以allMembers(L1,L2).应该返回true并且allMembers(L1,[2,3,4]).应该返回false,因为没有4inL1

我认为如果它在另一个列表中找到该元素(通过将其拆分直到列表只包含一项),可以获取一个列表的头部并返回 true,但我不知道如何在序言。

如果你能帮助我更快地吸收,那就太好了(?)

我在这里发现了类似的问题,但找不到我的具体问题的答案:/

编辑:
我现在有:

isMemberOf(X,[X|_]).
isMemberOf(X,[_|T]):- member(X,T).
Run Code Online (Sandbox Code Playgroud)

我需要将其用于L1to中的任何元素L2

compare list prolog

5
推荐指数
2
解决办法
9334
查看次数

标签 统计

prolog ×2

compare ×1

list ×1