Ejemplo n.º 1
0
def hanoi():

    from hornet import Database, pyfunc, _, greater, let, cut
    from hornet.symbols import play_hanoi, move, M, N, From, With, To

    @pyfunc
    def show_move(N, From, To, With):
        towers[To()].push(towers[From()].pop())

    db = Database()

    db.tell(

        play_hanoi(N, From, To, With) <<
            greater(N, 0) &
            move(N, From, To, With),

        move(1, From, To, _)[show_move] << cut,
        move(N, From, To, With) <<
            let(M, N - 1) &
            move(M, From, With, To) &
            move(1, From, To, _) &
            move(M, With, To, From),
    )

    for subst in db.ask(play_hanoi(6, 0, 1, 2)):
        print('Yes.')
        break
    else:
        print('No.')