Use un solo RESUME para todos los estilos INTERCAL-72 si construye
Si necesita escribir el equivalente de una declaración "if", el método normal que usa el código INTERCAL-72 es hacer NEXTdos veces y luego hacer un cálculo RESUME. (En el código moderno, a menudo un cómputo COME FROMserá mejor, pero este consejo supone que su código lo prefiere NEXT). Es casi seguro que tiene que pagar los bytes por el primero NEXT, ya que salta de una rama del "si" a la otra. Compartir el segundo NEXTtampoco es trivial, a menos que tenga muchas declaraciones "si" que van al mismo lugar al ver a #1. Sin embargo, RESUMEpuede estar en cualquier parte del programa (porque el control lo dejará instantáneamente en cualquier lugar).
Hay dos formas de manejar esto. Si tiene muchas declaraciones "if", entonces RESUMEprobablemente garantice un número de línea de un solo dígito, de modo que su segunda NEXTdeclaración pueda ser lo más breve posible. Si es posible, intente que sea un cómputo RESUMEque ocurriría naturalmente en su código (es cierto, esto es difícil, ya que es raro que aparezcan en el "flujo normal" de código en lugar de ser NEXTeditados); entonces, el único costo es el número de línea. Tendrá que usar una sola variable booleana para todos estos NEXTs; el consenso universal aquí es usar .5, principalmente porque es la variable que la biblioteca estándar usa para valores de retorno booleanos.
Alternativamente, es posible hacer uso de una característica indocumentada (técnicamente subdocumentada, porque introduje una pista en la documentación de INTERCAL cuando me di cuenta) de la biblioteca estándar. Debido a que una ubicación central para a RESUMEes tan útil, la biblioteca estándar usa una internamente. Los números de línea en INTERCAL son globales (con convenciones de espacios de nombres, pero que se pueden dividir si sabe lo que está haciendo), por lo que puede acceder NEXTdirectamente a las partes internas de la biblioteca estándar si lo desea, y en particular, NEXTa su ubicación central de REANUDACIÓN . Esto es suficientemente popular en el código INTERCAL existente que los reemplazos de biblioteca estándar tienden a tener que implementarlo para evitar romper los programas existentes.
La línea en cuestión es (literal o efectivamente, dependiendo de la implementación):
(1001) DO RESUME .5
La razón principal para no usar esto es su número de línea larga; si necesita hacer muchas construcciones if de estilo INTERCAL-72, será mejor usar la suya para darle un número más corto.
Por supuesto, puedes combinar las técnicas, escribiendo algo como
(9)DO(1001)NEXT
que es solo marginalmente más largo que
(9)DORESUME.5
y tiene el beneficio de que los booleanos se vuelven #2y #3(que es más difícil de leer, pero normalmente más fácil de generar). En realidad, incluso podría valer la pena poner el código adicional para manejar #0y #1si va a estar mucho (pero calculado COME FROMprobablemente funcionará mejor en este caso a menos que sus requisitos sean muy raros).