Controla con código una grúa de almacén y reapila cajas de colores con un límite de instrucciones tan ajustado que exige recursión.
Construye un programa con instrucciones para la grúa (moverse a izquierda y derecha, agarrar, soltar y condiciones de color) para reorganizar los contenedores de cajas hasta formar la pila objetivo. El límite de instrucciones es deliberadamente ajustado, así que tendrás que apoyarte en el comando Call, que vuelve a ejecutar todo el programa desde el principio; una condición que falla se convierte en el caso base que detiene la recursión. Hay diez niveles diseñados a mano, desde una sola caja roja hasta una torre de seis cajas, y ocho de ellos no se pueden resolver sin Call.
Torre de tres: tres cajas rojas están en el contenedor 1 y deben acabar en el contenedor 2, y solo puedes usar seis instrucciones. Escrito paso a paso, cada caja necesita Grab, Right, Drop y Left: once instrucciones para tres cajas, incluso quitando el último Left. Seis no bastan.
Así que escribe un solo viaje y deja que se repita: Grab, If-held rojo, Right, Drop, Left, Call. Son seis instrucciones. La grúa agarra una caja, comprueba que sostiene una roja, la lleva, la deja, vuelve y llama de nuevo a todo el programa. En la cuarta llamada el contenedor 1 está vacío, Grab no recoge nada, la comprobación If-held rojo falla y el programa se detiene. Esa comprobación que falla es el caso base.
Cambia If-held rojo por If-held azul y las mismas seis instrucciones resuelven también el nivel de cuatro cajas y la torre de seis, porque la rutina nunca cuenta cajas: sigue hasta que no queda ninguna. Esa es la gracia de la recursión: el programa describe un paso y una regla de parada, y la entrada decide cuántas veces se ejecuta.
Claw Compiler enseña recursión con una grúa que apila cajas y un presupuesto estricto de movimientos, haciendo concreta una idea difícil.
Las instrucciones de la grúa (moverse a izquierda y derecha, agarrar, soltar y condiciones sobre el color) son un lenguaje ensamblador mínimo con un cuerpo físico añadido.
Enseñar programación mediante un pequeño robot en un pequeño mundo se remonta a Karel the Robot, el lenguaje para principiantes que Richard Pattis presentó en un libro de 1981 y usó en sus cursos de Stanford. Los juegos retomaron la idea: Lightbot enseña bucles y procedimientos programando un robot a través de un laberinto, y el antepasado más cercano de Claw Compiler es Cargo-Bot, un rompecabezas para iPad de 2012 en el que enseñas a un robot a mover cajas. Two Lives Left lo creó con Rui Viana a partir del prototipo de este en Codea, su aplicación de programación para iPad, y lo presentó como el primer juego programado íntegramente en un iPad.
La tarea, reordenar contenedores de cajas hasta formar una pila objetivo, es una ordenación hecha por una máquina que solo puede sostener una cosa a la vez. Ese límite de una sola pinza es una lección en sí misma. Es la misma restricción que impone un registro, y es la razón por la que ordenar de verdad necesita un sitio donde dejar cosas: descubrir que necesitas un contenedor libre es descubrir la idea del almacenamiento temporal.
Como Call es siempre la última instrucción, todos los programas de este juego tienen recursión de cola: la llamada a sí mismo es lo último que hacen. Muchas implementaciones de lenguajes convierten una llamada de cola en un simple salto al principio, y por eso el mismo programa puede leerse como recursión o como bucle. Ver que ambos son una misma idea es buena parte de entender la recursión.
Claw Compiler es un juego original y gratuito para navegador creado para PlayPendium: un lenguaje de grúa de siete instrucciones, diez niveles cuyos límites hacen la recursión necesaria y no opcional, un nivel diario compartido y un modo de práctica que reparte los demás.