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 NEXT
dos veces y luego hacer un cálculo RESUME
. (En el código moderno, a menudo un cómputo COME FROM
será 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 NEXT
tampoco es trivial, a menos que tenga muchas declaraciones "si" que van al mismo lugar al ver a #1
. Sin embargo, RESUME
puede 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 RESUME
probablemente garantice un número de línea de un solo dígito, de modo que su segunda NEXT
declaración pueda ser lo más breve posible. Si es posible, intente que sea un cómputo RESUME
que 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 NEXT
editados); entonces, el único costo es el número de línea. Tendrá que usar una sola variable booleana para todos estos NEXT
s; 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 RESUME
es 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 NEXT
directamente a las partes internas de la biblioteca estándar si lo desea, y en particular, NEXT
a 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 #2
y #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 #0
y #1
si va a estar mucho (pero calculado COME FROM
probablemente funcionará mejor en este caso a menos que sus requisitos sean muy raros).