Под выравниванием Я имею в виду, что предикат занимает два списка, ну три с списком выравнивания. И затем убедитесь, что каждый элемент в списке выравнивания действительно является элементом как в других строках. И есть требование о порядке, так что исключает просто проверку того, что каждый элемент в списке выравнивания является членом обоих остальных входных данных. Если я просто проверю член, правильное выравнивание также будет действительным при обратном. Это, конечно, неправильно.Prolog Предикат для выравнивания
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)
[E1 | T1], разве вы не удаляете голову здесь? Так что T1 и T2 будут пустыми в конце? – Algific
Удаление? [E1 | T1] соответствует списку с хотя бы одним элементом. В результате переменные E1 и T1 получают привязки. Это все. Обратите внимание, что это не полное решение, поскольку вам нужен намек. Вам нужно написать «удаление» или «добавление» частей самостоятельно. – Kaarel
Я схожу с ума, дай мне что-то еще. Более того, я попросил! – Algific