Zipper

Zipper

Media

Instrucciones

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)
Editar en GitHub El enlace se abre en una ventana o pestaña nueva
Roc Exercism

¿Listo para empezar Zipper?

Regístrate en Exercism para aprender y dominar Roc con 120 ejercicios y mentoría humana real, todo gratis.