Comande com código um guindaste de armazém, reempilhando caixas coloridas sob um limite de instruções apertado o bastante para exigir recursão.
Monte um programa com as instruções do guindaste (mover para a esquerda e para a direita, agarrar, soltar e condições de cor) para reorganizar os compartimentos de caixas até formar a pilha-alvo. O limite de instruções é deliberadamente apertado, então você vai se apoiar no comando Call, que executa de novo todo o programa desde o início; uma condição que falha torna-se o caso base que interrompe a recursão. São dez níveis feitos à mão, de uma única caixa vermelha até uma torre de seis caixas, e oito deles não podem ser resolvidos sem Call.
Torre de Três: três caixas vermelhas estão no compartimento 1 e precisam terminar no compartimento 2, e você só pode usar seis instruções. Escrito por extenso, cada caixa precisa de Grab, Right, Drop e Left: onze instruções para três caixas, mesmo dispensando o último Left. Seis não bastam.
Então escreva uma única viagem e deixe que ela se repita: Grab, If-held vermelho, Right, Drop, Left, Call. São seis instruções. O guindaste agarra uma caixa, verifica se está segurando uma vermelha, leva-a até o outro lado, a solta, volta e chama o programa inteiro de novo. Na quarta chamada o compartimento 1 está vazio, Grab não pega nada, a verificação If-held vermelho falha e o programa para. Essa verificação que falha é o caso base.
Troque If-held vermelho por If-held azul e as mesmas seis instruções resolvem também o nível de quatro caixas e a torre de seis, porque a rotina nunca conta caixas; ela continua até não sobrar nenhuma. É esse o sentido da recursão: o programa descreve um passo e uma regra de parada, e a entrada decide quantas vezes ele é executado.
Claw Compiler ensina recursão por meio de um guindaste que empilha caixas e de um orçamento rigoroso de movimentos, tornando concreta uma ideia difícil.
As instruções do guindaste — mover para a esquerda e para a direita, agarrar, soltar e condições de cor — são uma linguagem de montagem mínima com um corpo físico acoplado.
Ensinar programação por meio de um pequeno robô num pequeno mundo remonta a Karel the Robot, a linguagem para iniciantes que Richard Pattis apresentou num livro de 1981 e usou em seus cursos em Stanford. Os jogos adotaram a ideia: Lightbot ensina loops e procedimentos programando um robô por um labirinto, e o ancestral mais próximo de Claw Compiler é Cargo-Bot, um quebra-cabeça para iPad de 2012 em que você ensina um robô a mover caixas. A Two Lives Left o criou com Rui Viana a partir do protótipo dele no Codea, o app de programação para iPad do estúdio, e o anunciou como o primeiro jogo programado inteiramente num iPad.
A tarefa, reorganizar compartimentos de caixotes numa pilha-alvo, é ordenação feita por uma máquina que consegue segurar exatamente uma coisa de cada vez. Esse limite de uma única garra é uma lição por si só. É a mesma restrição que um registrador impõe, e é por isso que a ordenação real precisa de um lugar onde largar as coisas — descobrir que você precisa de um compartimento extra é descobrir a ideia de armazenamento temporário.
Como Call é sempre a última instrução, todo programa aqui é recursivo em cauda: a chamada a si mesmo é a última coisa que ele faz. Muitas implementações de linguagens transformam uma chamada de cauda num simples salto de volta ao início, e é por isso que o mesmo programa pode ser lido tanto como recursão quanto como loop. Perceber que os dois são uma só ideia é boa parte de entender a recursão.
Claw Compiler é um jogo de navegador original e gratuito feito para a PlayPendium: uma linguagem de guindaste com sete instruções, dez níveis cujos limites tornam a recursão necessária, e não opcional, um nível diário compartilhado e um modo de prática que sorteia os demais.