Уточнимо постановку задачі. Нехай ми маємо три
спеціальних сердечники, на яких проходить переміщення дисків.
Висота сердечників достатня для того, щоб на ній могли
розміститись всі n дисків. Всі диски різного діаметру, а
внутрішній отвір більший за діаметр сердечників. Спочатку всі
диски розміщені на першому сердечнику в спадному, згідно
зовнішнього діаметра, порядку. Їх потрібно перенести на третій
сердечник, використовуючи другий сердечник, так , щоб вони
розмістились в такому ж порядку, як були на першому
сердечнику. При переміщеннях потрібно дотримуватись такого
обмеження: ніколи диск більшого диаметра не може
знаходитись зверху хоча б над одним диском меншого діаметра.
Для переносу можна запропонувати наступний
рекурсивний алгоритм.
* Один диск можна перенести прямо на потрібний
сердечник.
* N дисків можна перемістить так:
1.Перемістить останній (N-ий) диск прямо на третій
(правий) сердечник;
2.Перемістить N-1 диск на другий (середній) сердечник;
3.Перемістить прямо N-ий диск з третього сердечника на
перший (лівий);
4.Перемістить N-1 диск з другого на третій;
5.Перемістить N-ий диск прямо з першого на третій
сердечник;
Програма Прологу, яка вирішуз задачу про Ханойські
Башні, буде використовувати три предикати:
1. hanoi з одним параметром, який характеризує загальну
кількість дисків.
2. move, який описує переміщення N дисків з одного
сердечника на інший, використовуючи третій сердечник, як
тимчасове місцезнаходження дисків.
3. inform, відображає на екрані дисплею, як проходять
переміщення.
121