鉴于多个列表包含子列表,您如何检查等效性?例如,您提供如下数据集:
table(book,
[[["A"], ["A"], ["B", "C"], ["B", "C"]],
[["C"], ["S", "A"], ["S", "B", "A"]],
[["C", "A"], ["C", "S", "A"]],
[["C", "B", "S", "A"]]]).
table(book3,
[[["A"], ["A"], ["B", "C"], ["B", "C"]],
[["C"], ["S", "A"], ["S", "B", "A"]],
[["C", "A"], ["C", "S", "A"]],
[["A", "S", "B", "C"]]]).
现在,您必须检查这两个表是否相同。以下是两个表等效时的示例输出:
?- table(book,T1),table(book3,T2),table_equivalent(T1,T2).
T1 = [[["A"], ["A"], ["B", "C"], ["B", "C"]],
[["C"], ["S", "A"],["S", "B", "A"]],
[["C", "A"], ["C", "S", "A"]], [["C", "B", "S", "A"]]],
T2 = [[["A"], ["A"], ["B", "C"], ["B", "C"]],
[["C"], ["S", "A"],["S", "B", "A"]],
[["C", "A"], ["C", "S", "A"]],
[["A", "S", "B", "C"]]].
我有一个谓词,用于检查两个列表与子列表的等价性:
row_equivalent(RowA,RowB) :-
check_sublist_equivalence(RowA, RowB).
check_sublist_equivalence([],[]).
check_sublist_equivalence([H|T],[H1|T1]) :-
rows(H,H1),
check_sublist_equivalence(T,T1).
rows([],_).
rows([H2|T2],K) :- member(H2,K), rows(T2,K).
有什么办法可以用这个谓词来检查上面两个表的等价性吗?