Verwenden Sie einen einzigen RESUME für alle Konstrukte im INTERCAL-72-Stil
Wenn Sie das Äquivalent einer "if" -Anweisung schreiben müssen, besteht die normale Methode mit INTERCAL-72-Code darin, NEXT
zweimal zu arbeiten und dann eine Berechnung durchzuführen RESUME
. (In modernem Code ist ein berechneter Code oft COME FROM
besser, aber dieser Tipp setzt voraus, dass Ihr Code bevorzugt wird NEXT
.) Sie müssen mit ziemlicher Sicherheit die Bytes für das erste bezahlen NEXT
, da es von einem Zweig des "Wenn" zum anderen springt. Das Teilen der zweiten NEXT
ist ebenfalls nicht trivial, es sei denn, Sie haben viele "if" -Anweisungen, die beim Anzeigen von a an dieselbe Stelle gehen #1
. Das RESUME
kann sich jedoch an einer beliebigen Stelle im Programm befinden (da die Steuerung es sofort an einer beliebigen Stelle belassen wird).
Es gibt zwei Möglichkeiten, damit umzugehen. Wenn Sie viele "if" -Anweisungen haben, RESUME
garantiert die wahrscheinlich eine einstellige Zeilennummer, damit Ihre zweite NEXT
Anweisung so kurz wie möglich sein kann. Wenn möglich, versuchen Sie, daraus eine Berechnung zu machen RESUME
, die natürlich in Ihrem Code vorkommen würde (zugegebenermaßen ist dies schwierig, da diese nur selten im "normalen Codefluss" angezeigt werden, anstatt NEXT
bearbeitet zu werden). dann sind die einzigen Kosten die Zeilennummer. Sie müssen für alle diese NEXT
s eine einzige boolesche Variable verwenden . Der universelle Konsens besteht darin .5
, hauptsächlich die Variable zu verwenden, die die Standardbibliothek für boolesche Rückgabewerte verwendet.
Alternativ ist es möglich, eine undokumentierte Funktion (technisch unterdokumentiert, da ich einen Hinweis in die INTERCAL-Dokumentation eingefügt habe, als ich es bemerkte) der Standardbibliothek zu verwenden. Da ein zentraler Speicherort für a RESUME
so nützlich ist, verwendet die Standardbibliothek intern einen. Die Zeilennummern in INTERCAL sind global (mit Namespace-Konventionen, die jedoch unterbrochen werden können, wenn Sie wissen, was Sie tun), sodass Sie NEXT
direkt in die Interna der Standardbibliothek wechseln können NEXT
, wenn Sie möchten, und insbesondere zu ihrem zentralen RESUME-Speicherort . Dies ist in vorhandenem INTERCAL-Code so beliebt, dass Standardbibliotheksersetzungen ihn tendenziell implementieren müssen, um zu vermeiden, dass vorhandene Programme beschädigt werden.
Die fragliche Zeile lautet (entweder wörtlich oder effektiv, abhängig von der Implementierung):
(1001) DO RESUME .5
Der Hauptgrund, dies nicht zu verwenden, ist seine lange Zeilennummer; Wenn Sie viele Konstrukte im INTERCAL-72-Stil ausführen müssen, ist es besser, Ihre eigenen zu verwenden, um eine kürzere Zahl zu erhalten.
Natürlich können Sie die Techniken kombinieren und so etwas schreiben
(9)DO(1001)NEXT
das ist nur unwesentlich länger als
(9)DORESUME.5
und hat den Vorteil, dass die Booleschen Werte werden #2
und #3
(was schwerer zu lesen, aber normalerweise einfacher zu generieren ist). Tatsächlich könnte es sich sogar lohnen, den zusätzlichen Code einzugeben , der verarbeitet werden soll, #0
und #1
wenn Sie viel ficken werden (aber die Berechnung COME FROM
funktioniert in diesem Fall wahrscheinlich besser, es sei denn, Ihre Anforderungen sind sehr seltsam).