2010-03-11 59 views
1
  1. 如果我有两个列表,说A和B制造不同的字母。列表A中的[b,a,c]和列表B中的[b,d,c,e] 我怎样才能得到序言给我C,这是列表B中没有包含的元素列表B例如, 所以,如果我输入 difference([b,a,c],[b,d,c,e],C). 我想要的答案为: C=[a]如何在序言中找到列表中的差异,并确定列表是否相同(相同的元素但不必具有相同的顺序)

  2. ,如果我有两个列表,其中列表一个由关[A,B,C]和列表B是[C,A, b] 我想要结果是Yes如果我键入: same([a,b,c],[c,a,b]).因为它们包含相同的元素,它们以不同的顺序并不重要。如果所有的元素都是相同的,如果3/4是正确的,它也应该只回答是。

回答

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的成员,那么它们是相同的。

我希望这会有所帮助。你总是可以发布你的尝试,这样我们可以给更多的指针。

相关问题