Write a Program in PROLOG to Solve a Tower of Hanoi Problem

Tower of Hanoi Problem in Prolog:

The ancient puzzle of the Tower of Hanoi consists of some wooden disks and three poles attached to a baseboard. The disks each have different diameters and a hole in the middle large enough for the poles to pass through. The object of the puzzle is to move all the disks over to the right pole, one at a time, so that they end up in the original order on that pole. The middle pole may be used as a temporary resting place for disks, but at no time is a larger disk to be on top of a smaller one. The Tower of Hanoi problem can be easily solved with one or two disks but becomes more difficult with three or more disks.

A simple strategy for solving the puzzle is –

1. A single disk can be moved directly.
2. N disks can be moved in three steps:

    i. Move N-1 disks to the middle pole.
    ii. Move the last disk directly over to the right pole.
    iii. Move the N-1 disks from the middle pole to the right pole.

PROLOG Program to Solve a Tower of Hanoi Problem:

domains
        loc=right; middle; left

predicates
            hanoi(integer)
            move(integer, loc, loc, loc)
            inform(loc, loc)
    
clauses
       hanoi(N):- move(N, left, middle, right).
            move(1, A, _, C):- inform(A, C),!
            move(N, A, B, C):-
                    N!=N-1, move(N1, A, C, B),
                        inform(A, C),
                        move(N1, B, A, C)
            inform(LOC1, LOC2):-
        write("\n Move a disk from", LOC1, "to", LOC2).