如何在prolog中找到列表中的差异并确定列表是否相同(相同的元素但不必具有相同的顺序)

时间:2010-03-11 15:57:15

标签: prolog

  1. 如果我有两个名单,说A和B用不同的字母组成。列表A中的[b,a,c]和列表B中的[b,d,c,e] 我怎么能得到prolog给我C,这是一个A列出的元素列表,不包括在列表B中 防爆。 所以,如果我输入 difference([b,a,c],[b,d,c,e],C). 我想要的答案是: C=[a]

  2. 如果我有两个列表,其中列表A由[a,b,c]组成,列表B是[c,a,b] 如果我键入,我希望结果为Yessame([a,b,c],[c,a,b]).因为它们包含相同的元素,所以它们的顺序不同并不重要。如果所有元素都相同则不应该回答是,如果3/4是正确的话。

1 个答案:

答案 0 :(得分:1)

由于这看起来像家庭作业,我只会给出一些想法而不是实际的代码:

首先,您可以从确定元素是否是列表成员的成员过程开始:

  member(X, [X|_]).
  member(X, [_|T]) :- member(X, T).

所以X要么是列表的头部,要么是尾部的成员。

您的第一个问题可以回答为:

  1. If list A is empty then list C is empty
  2. The head of A (HA) is the head of C if member(HA, B) is false AND the Tail of C (CT) can be found by recursively calling the procdure with the tail of A (TA), B and CT.
  3. Otherwise, if HA is a member of B then just recusively call the procedure on TA, B and C

同样,第二个问题可以使用上述程序回答。如果A中不在B中的字母列表为空,并且A的每个元素都是B的成员,则它们是相同的。

我希望这会有所帮助。您可以随时发布您尝试的内容,以便我们提供更多指示。