すべてのINTERCAL-72スタイルで1つのRESUMEを使用します。
「if」ステートメントに相当するものを作成する必要がある場合、INTERCAL-72コードを使用する通常の方法は、NEXT2回行ってから計算されRESUMEます。(最近のコードでは、多くの場合、計算COME FROMされた方が優れていますが、このヒントでは、コードが優先することを前提としていますNEXT。)NEXT「if」の1つのブランチから別のブランチにジャンプするため、最初ののバイトを支払う必要があります。NEXTを見てすぐに同じ場所に移動する「if」ステートメントがたくさんない限り、2番目を共有することも簡単ではありません#1。ただし、はRESUMEプログラムのどこにあってもかまいません(コントロールが即座にどこにでも置くためです)。
これを処理するには2つの方法があります。「if」ステートメントが多数ある場合は、RESUMEおそらく1桁の行番号が必要であるため、2番目のNEXTステートメントをできるだけ短くすることができます。可能であれば、RESUMEコードで自然に発生する計算にしてみてください(間違いなく、コードの「通常のフロー」に表示されることはまれなので、これは難しいNEXTです)。次に、唯一のコストは行番号です。これらすべてに単一のブール変数を使用する必要がありますNEXT。ここでの普遍的なコンセンサスはを使用する.5ことです。これは主に、標準ライブラリがブール値の戻り値に使用する変数だからです。
または、標準ライブラリのドキュメント化されていない(気づいたときにINTERCALドキュメントにヒントを入れたため、技術的にはドキュメント化されていない)機能を利用することもできます。の中央の場所RESUMEは非常に便利なので、標準ライブラリは内部で1つ使用します。INTERCALにおける行番号はグローバルである(規約を名前空間を持つが、これはあなたが何をやっている知っている場合分けることができます)あなたができるので、NEXTあなたがする右の標準ライブラリの内部にしたい場合は、特に、缶NEXTにその中心RESUME場所。これは、既存のINTERCALコードで十分に普及しているため、標準ライブラリの置き換えにより、既存のプログラムの破壊を回避するために実装する必要があります。
問題の行は次のとおりです(文字どおりまたは効果的に、実装によって異なります)。
(1001) DO RESUME .5
これを使用しない主な理由は、長い行番号です。多くのINTERCAL-72スタイルのif構文を実行する必要がある場合は、独自のものを使用してより短い数を与えることをお勧めします。
もちろん、テクニックを組み合わせて、次のようなものを書くことができます
(9)DO(1001)NEXT
ほんの少しだけ長いです
(9)DORESUME.5
そして、ブール値が#2andになるという利点があります#3(これは読みにくいですが、通常は生成が簡単です)。実際に、それも価値がハンドルに余分なコードを入れてあるかもしれない#0し、#1あなたは多くのことをiffingするつもりなら(ただし、計算されたCOME FROM要件は非常に奇妙でない限り、おそらくこのケースでは、より良い動作します)。