Utilisez un seul CV pour tous les modèles INTERCAL-72 en cas de restructuration
Si vous devez écrire l'équivalent d'une instruction "if", la méthode normale utilisant le code INTERCAL-72 est de faire NEXT
deux fois, puis de faire un calcul RESUME
. (Dans le code moderne, souvent un calcul COME FROM
sera meilleur, mais cette astuce suppose que votre code préfère NEXT
.) Vous devez presque certainement payer les octets pour le premier NEXT
, car il saute d'une branche du "si" à l'autre. Partager le second NEXT
n'est pas non plus trivial, sauf si vous avez beaucoup de déclarations «si» qui vont au même endroit en voyant a #1
. Cependant, le RESUME
peut être n'importe où dans le programme (car le contrôle va le laisser instantanément n'importe où).
Il y a deux façons de gérer cela. Si vous avez beaucoup d'instructions "si", alors le RESUME
garantit probablement un numéro de ligne à un chiffre, de sorte que votre deuxième NEXT
instruction puisse être aussi courte que possible. Si possible, essayez d'en faire un calcul RESUME
qui se produirait naturellement dans votre code (certes, c'est difficile, car il est rare que ceux-ci apparaissent dans le "flux normal" de code plutôt que d'être NEXT
édités); alors, le seul coût est le numéro de ligne. Vous devrez utiliser une seule variable booléenne pour tous ces NEXT
s; le consensus universel ici est d'utiliser .5
, principalement parce que c'est la variable que la bibliothèque standard utilise pour les valeurs de retour booléennes.
Alternativement, il est possible d'utiliser une fonctionnalité non documentée (techniquement sous-documentée, car j'ai glissé un indice dans la documentation INTERCAL lorsque j'ai remarqué) de la bibliothèque standard. Parce qu'un emplacement central pour a RESUME
est si utile, la bibliothèque standard en utilise un en interne. Les numéros de ligne dans INTERCAL sont globaux (avec des conventions d'espacement de noms, mais qui peuvent être rompus si vous savez ce que vous faites), vous pouvez donc accéder NEXT
directement aux internes de la bibliothèque standard si vous le souhaitez, et en particulier, NEXT
à son emplacement central de CV . Ceci est suffisamment populaire dans le code INTERCAL existant pour que les remplacements de bibliothèque standard aient tendance à l'implémenter pour éviter de casser les programmes existants.
La ligne en question est (littéralement ou efficacement, selon la mise en œuvre):
(1001) DO RESUME .5
La principale raison de ne pas l'utiliser est son numéro de ligne longue; si vous avez besoin de faire beaucoup de constructions if de style INTERCAL-72, il sera préférable d'utiliser la vôtre pour lui donner un nombre plus court.
Bien sûr, vous pouvez combiner les techniques en écrivant quelque chose comme
(9)DO(1001)NEXT
qui n'est que légèrement plus longue que
(9)DORESUME.5
et a l'avantage que les booléens deviennent #2
et #3
(ce qui est plus difficile à lire, mais normalement plus facile à générer). En fait, cela pourrait même valoir la peine de mettre du code supplémentaire à gérer #0
et #1
si vous allez beaucoup différer (mais le calcul COME FROM
fonctionnera probablement mieux dans ce cas, sauf si vos exigences sont très étranges).