Use um único RESUME para todos os estilos INTERCAL-72, se houver
Se você precisar escrever o equivalente a uma instrução "if", o método normal usando o código INTERCAL-72 é NEXT
duas vezes e, em seguida, faça um cálculo RESUME
. (No código moderno, geralmente um computador COME FROM
é melhor, mas essa dica pressupõe que seu código prefira NEXT
). Você quase certamente precisa pagar os bytes pelo primeiro NEXT
, pois ele salta de um ramo do "se" para o outro. Compartilhar a segunda NEXT
também não é trivial, a menos que você tenha muitas instruções "se" que vão para o mesmo lugar ao ver a #1
. No entanto, RESUME
pode estar em qualquer lugar do programa (porque o controle o deixará instantaneamente em qualquer lugar).
Existem duas maneiras de lidar com isso. Se você tiver muitas instruções "se", RESUME
provavelmente isso garante um número de linha de um dígito, para que sua segunda NEXT
instrução possa ser a mais curta possível. Se possível, tente transformá-lo em um computador RESUME
que ocorreria naturalmente em seu código (é certo que isso é difícil, pois é raro aparecer no "fluxo normal" do código em vez de ser NEXT
editado para ele); então, o único custo é o número da linha. Você precisará usar uma única variável booleana para todos esses NEXT
s; o consenso universal aqui é usar .5
, principalmente porque é a variável que a biblioteca padrão usa para valores de retorno booleanos.
Como alternativa, é possível fazer uso de um recurso não documentado (tecnicamente não documentado, porque eu inseri uma dica na documentação INTERCAL quando notei) da biblioteca padrão. Como um local central para um RESUME
é tão útil, a biblioteca padrão usa um internamente. Os números de linha em INTERCAL são globais (com namespacing convenções, mas que pode ser quebrado se você sabe o que está fazendo), para que possa NEXT
direto para a parte interna da biblioteca padrão, se você quiser, e em particular, pode NEXT
a sua localização central, RESUME . Isso é suficientemente popular no código INTERCAL existente que as substituições de bibliotecas padrão tendem a implementá-lo para evitar a quebra de programas existentes.
A linha em questão é (literal ou efetivamente, dependendo da implementação):
(1001) DO RESUME .5
O principal motivo para não usar isso é o número da linha longa; se você precisar criar um monte de estruturas do tipo INTERCAL-72, será melhor usar o seu próprio para fornecer um número menor.
Claro, você pode combinar as técnicas, escrevendo algo como
(9)DO(1001)NEXT
que é apenas marginalmente mais longo do que
(9)DORESUME.5
e tem o benefício que os booleanos se tornam #2
e #3
(que é mais difícil de ler, mas normalmente mais fácil de gerar). Na verdade, pode até valer a pena colocar o código extra para lidar #0
e #1
se você vai se esforçar muito (mas calculado COME FROM
provavelmente funcionará melhor nesse caso, a menos que seus requisitos sejam muito estranhos).