我们走吧,忍受我。总体目标是返回两个列表之间的最大对齐。如果有多个具有相同长度的对齐,它可以只返回第一个。
对齐是指两个列表共享的元素,按正确的顺序但不一定按顺序。1,2,3 和 1,2,9,3;这里 1,2,3 将是最长的对齐方式。任何知道我已经定义的谓词的人。
align(Xs, Ys, [El | T]) :-append(_, [El | T1], Xs),append(_, [El | T2], Ys),align(T1, T2, T).
align(_Xs, _Ys, []).
然后我使用内置谓词 findall 来获取这些列表之间所有对齐的列表?在这种情况下,它将最大的对齐放在第一位,但我不知道为什么。
findall(X,align([1,2,3],[1,2,9,3],X),L).
这将返回以下内容;
L = [[1, 2, 3], [1, 2], [1, 3], [1], [2, 3], [2], [3], []].
这是正确的,但是现在我需要一个谓词来结合这两者并返回列表列表中的最大列表。