Я пытаюсь написать программу для решения башен проблемы ханой в Прологе. Ни одна из должностей здесь не помогла мне, поэтому я решил попросить себя. Я написал следующий код. Он хорошо работает на 2-х дисках, но переходит в бесконечный цикл для 3.Пролог - Башни Ханоя
hanoi(1,A,B,_,[(A,B)]).
hanoi(X,A,B,C,Y):-
hanoi(X2,A,C,B,Y1),
hanoi(1,A,B,_,[Y2]),
hanoi(X2,C,B,A,Y3),
append(Y1,[Y2|Y3],Y),
X2 is X-1.
Это называется следующим образом:
?- hanoi(3, a, b, c, Y).
а, Ь, с колышки. 3 - количество дисков, а X - это то место, где мы хотим получить результат.
Мне нужно получить результат в Y. Я пытаюсь рекурсивно найти ходы для дисков X-1 с привязки от 1 до 3 с использованием 2, 1 диска с привязкой 1 к 2, диски X-1 из привязки 3 до 2 и добавить их. Я не понимаю, что я делаю неправильно. Любая помощь или руководство будут оценены! Благодаря!
Что означают аргументы? Какие из них должны быть приведены к типу термина? Альтернативно: покажите нам, как вы называете этот предикат. –