Задать вопрос
@valerahex

Возможно ли сравнить позиции элементов в двух списках?

Здравствуйте, прошу помощи в реализации алгоритма для сравнения позиций элементов в двух списках.
Первый список - последовательность произвольных элементов. Второй список - последовательность элементов из первого списка. Необходимо написать предикат, который вернет истину, если элементы второго списка имеют ту же очередность, что и в первом. Например
[1, 1, 1, 2, 2, 2, 3, 3, 3]
[1, 2, 3]
true

[1, 1, 1, 2, 2, 2, 3, 3, 3]
[1, 3, 2]
false
  • Вопрос задан
  • 108 просмотров
Подписаться 1 Средний 1 комментарий
Пригласить эксперта
Ответы на вопрос 1
Помощь на подходе :) но задача не до конца объяснена -- как я понимаю, в первом случае числа идут блоками, а во втором? Хорошо, а может быть в первом случае [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.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы