Zipper

Zipper

Intermedia

Instrucciones

Crear un zipper para un árbol binario.

Los zippers son una forma puramente funcional de navegar dentro de 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 (donde cada nodo contiene un valor y una lista de nodos hijos), un zipper podría soportar 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 del foco)
  • prev (mover el foco al hijo anterior del mismo padre, devuelve un nuevo zipper)
  • next (mover el foco al siguiente hijo del mismo padre, devuelve un nuevo zipper)
  • up (mover el foco al nodo padre, devuelve un nuevo zipper)
  • set_value (asignar el valor del nodo del foco, devuelve un nuevo zipper)
  • insert_before (insertar un nuevo subárbol antes del nodo del foco, se convierte en el prev del nodo del foco, devuelve un nuevo zipper)
  • insert_after (insertar un nuevo subárbol después del nodo del foco, se convierte en el next del nodo del foco, devuelve un nuevo zipper)
  • delete (elimina el nodo del foco y todos los subárboles, el foco se mueve al nodo next si es posible, de lo contrario al nodo prev si es posible, de lo contrario al nodo padre, devuelve un nuevo zipper)

Ámbito

Encontrarás una clase Tree ya implementada para ti. Tu tarea es escribir la clase Zipper.

Editar en GitHub El enlace se abre en una ventana o una pestaña nuevas
Tcl Exercism

¿Todo listo para empezar Zipper?

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