我基本上想要实现的是,给定列表列表 A ,我想要一个谓词来检查列表 B 的元素是否完全包含在列表 A 。
中例如:
A = [[1,2],[3,4],[5],[]] B = [1,2,3,4,5]
和
A = [[1,2],[3,4],[5],[]] B = [2,5,3,4,1]
结果是真的,但是
A = [[1,2],[3,4],[5],[]] B = [1,2,3,4]
和
A = [[1,2],[3,4],[5],[]] B = [1,2,3,4,5,6]
都会导致错误。
这可以在prolog中使用吗?
正好意味着: 订单无关紧要,只需要包含所有元素。 另外,假设 B 列表不包含重复项。 因此,如果 A 包含重复项,那么我们应该得到错误。
答案 0 :(得分:1)
琐碎的答案:
?- flatten([[1,2],[3,4],[5],[]], [1,2,3,4,5]).
true.
?- flatten([[1,2],[3,4],[5],[]], [1,2,3,4]).
false.
?- flatten([[1,2],[3,4],[5],[]], [1,2,3,4,5,6]).
false.
或者,
foo(A, B) :- % because I don't know how to call it
flatten(A, B).
如果你在谈论集:
bar(A, B) :-
flatten(A, A_flat),
sort(A_flat, A_sorted),
sort(B, A_sorted).
如果您不想删除重复项,可以使用msort/2
。
如果问题是“如何实施flatten/2
”,您可以在SO上找到几个答案。