Crear un zipper para un árbol binario.
Los zippers son una forma puramente funcional de navegar por una estructura de datos y manipularla. Esencialmente, contienen una estructura de datos y un puntero dentro de esa estructura de datos (llamado el foco).
Por ejemplo, dado un árbol rosa (en el que cada nodo contiene un valor y una lista de nodos hijos), un zipper podría admitir estas operaciones:
from_tree (obtener un zipper a partir de un árbol rosa, el foco está en el nodo raíz)to_tree (obtener el árbol rosa a partir del zipper)value (obtener el valor del nodo que tiene el foco)prev (mover el foco al hijo anterior del mismo padre,
devuelve un zipper nuevo)next (mover el foco al hijo siguiente del mismo padre, devuelve un
zipper nuevo)up (mover el foco al padre, devuelve un zipper nuevo)set_value (establecer el valor del nodo que tiene el foco, devuelve un zipper nuevo)insert_before (insertar un subárbol nuevo antes del nodo que tiene el foco,
este pasa a ser el prev del nodo que tiene el foco, devuelve un zipper nuevo)insert_after (insertar un subárbol nuevo después del nodo que tiene el foco,
este pasa a ser el next del nodo que tiene el foco, devuelve un zipper nuevo)delete (elimina el nodo que tiene el foco y todos los subárboles, el foco se mueve
al nodo next si es posible; en caso contrario, al nodo prev si es posible;
y, en caso contrario, al nodo padre; devuelve un zipper nuevo)Regístrate en Exercism para aprender y dominar Roc con 120 ejercicios y mentoría humana real, todo gratis.