Под выравниванием я подразумеваю, что предикат занимает два списка, а три - со списком выравнивания. И затем проверьте, что каждый элемент в списке выравнивания действительно является элементом в обоих остальных списках. И есть требование к порядку, так что исключается просто проверка того, что каждый элемент в списке выравнивания является членом обоих других входных списков. Если я просто проверю член, действительное выравнивание также будет действительным при обратном. Что, конечно, не так.
Example:
?- mxAli([4,2,9,8],[1,9,5,2,3,8],A).
A=[2,8] or A=[9,8]
8,2 и 8,9 не действительны здесь.
В тот момент, когда я думаю о том, как на самом деле проверить порядок, моя голова возвращается к слишком императивному языку программирования. Любой вклад очень ценится. Но не давайте прямо ответ, я хочу подсказки о том, что я должен прочитать. (Я должен сказать это, потому что я получаю настолько хорошую помощь на этом сайте, что он слишком обманывает, если я не укажу на это).
Моя идея в том, что мне или прологу необходимо продолжить поиск по индексу его текущего элемента. Что сделало бы обратное выравнивание недействительным?
Редактировать: поиск продолжится после индекса текущего элемента в обоих списках. Как и в примере выше, когда он находит 2, он начинает поиск следующего элемента по индексу 2 и индексу 5. (Первый элемент равен 1)