dialect "objectdraw"

// program to print instructions for how to solve "Towers of Hanoi" with
// any number of disks
method solveHanoi(numDisks: Number)from(first:String)to(last:String) using (helper: String) {
    if (numDisks == 1) then {
       moveDisk(1)from(first)to(last)
    } else {
       solveHanoi(numDisks-1) from (first) to (helper) using (last)
       moveDisk(numDisks) from (first) to (last)
       solveHanoi(numDisks-1) from (helper) to (last) using (first)
    }
}

method moveDisk(n:Number) from (current:String) to (destination:String) {
    print "Moved disk {n} from {current} to {destination}"
}

solveHanoi(4) from ("A") to ("C") using "B"