Помощь на подходе :) но задача не до конца объяснена -- как я понимаю, в первом случае числа идут блоками, а во втором? Хорошо, а может быть в первом случае [1,2,3,3,3,222,1]? Или порядок фиксирован -- т.е. объекты встречаются много раз -- но если 3 идет после 2 и перед 5, т.е. [2,2,2,2,3,3,5] то тройка потом не может появиться позже?
В этом случае решение такое: r_duplicates -- удаляет дублирующие элементы из обоих списков -- т.е. [1, 1, 1, 2, 2, 2, 3, 3, 3] => превращается в [1,2,3] -- а потом сравнивает списки в лоб.
r_duplicates([],[]).
r_duplicates([H | T], List) :-
member(H, T),
r_duplicates( T, List).
r_duplicates([H | T], [H|T1]) :-
\+member(H, T),
r_duplicates( T, T1).
compare_order(X,Y) :- r_duplicates(X,Z), r_duplicates(Y,H), H == Z.