如果我有两个名单,说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]
如果我有两个列表,其中列表A由[a,b,c]组成,列表B是[c,a,b]
如果我键入,我希望结果为Yes
:
same([a,b,c],[c,a,b]).
因为它们包含相同的元素,所以它们的顺序不同并不重要。如果所有元素都相同则不应该回答是,如果3/4是正确的话。
答案 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的成员,则它们是相同的。
我希望这会有所帮助。您可以随时发布您尝试的内容,以便我们提供更多指示。