如何检查在prolog中有子列表的列表集?

时间:2018-03-03 00:08:57

标签: prolog

鉴于多个列表包含子列表,您如何检查等效性?例如,您提供如下数据集:

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).

有什么办法可以用这个谓词来检查上面两个表的等价性吗?

0 个答案:

没有答案