Ejercicio Torres de Hanoi + Tipos de Datos Algebraicos ------------------------------------------------------ 1. Modificar su implementacion de Hanoi usando el tipo de datos siguiente: data Palo = A | B | C deriving Show "deriving Show" es para hacer que el tipo de datos "Palo" sea mostrable en ghci. 2. Queremos comprobar que la solucion encontrada por la funcion hanoi es correcta. Por eso, vamos a usar el tipo sinonimo siguiente para representar una posicion: type Posicion = ([Integer],[Integer],[Integer]) Cada lista representa los discos en un palo. Un disco es representado por un Integer: 1 es el disco mas chiquito; si tenemos n discos, el mas grande es representado por n. El elemento mas a la izquierda de la lista (elemento de cabeza) es el que esta mas arriba en el palo. Implementar las funciones: posInicial :: Integer -> Posicion posFinal :: Integer -> Posicion aplicar :: Move -> Posicion -> Posicion La funcion siguiente aplica una secuencia de pasos a una posicion: aplicarLista :: [Move] -> Posicion -> Posicion Esta ultima funcion verifica que la funcion hanoi devuelve una secuencia de pasos que, aplicados a la posicion inicial, nos lleva a la posicion final: verificar :: Integer -> Bool Probar verificar con distintos valores de enteros. 3. Para hacerlo mas grafico, implementar: aplicarLista' :: [Move] -> Posicion -> [Posicion] verificar' :: Integer -> [Posicion] De manera que veamos en ghci: *Main> verificar' 3 [([1,2,3],[],[]),([2,3],[],[1]),([3],[2],[1]),([3],[1,2],[]),([],[1,2],[3]),([1],[2],[3]),([1],[],[2,3]),([],[],[1,2,3])] *Main> verificar' 4 [([1,2,3,4],[],[]),([2,3,4],[1],[]),([3,4],[1],[2]),([3,4],[],[1,2]),([4],[3],[1,2]),([1,4],[3],[2]),([1,4],[2,3],[]),([4],[1,2,3],[]),([],[1,2,3],[4]),([],[2,3],[1,4]),([2],[3],[1,4]),([1,2],[3],[4]),([1,2],[],[3,4]),([2],[1],[3,4]),([],[1],[2,3,4]),([],[],[1,2,3,4])]