仕様が主題について言うこと:
反復ループの形式は次のとおりです。
IM IN YR <label> <operation> YR <variable> [TIL|WILE <expression>]
<code block>
IM OUTTA YR <label>
<operation>は、UPPIN(1ずつインクリメント)、NERFIN(1ずつデクリメント)、または任意の単項関数です。その操作/関数は、一時的でループに対してローカルな<変数>に適用されます。TIL <expression>は、式をTROOFとして評価します。FAILと評価された場合、ループはもう一度続行され、そうでない場合、ループの実行は停止し、一致するIM OUTTAYR<label>の後に続行されます。WILE <expression>はその逆です。式がWINの場合、実行は続行されます。それ以外の場合、ループは終了します。
質問
仕様に対する私の不満は、次の組み合わせです。
- ループ変数初期化子の欠如
- 一時的でループに対してローカルであるという事実
私が理解しているように、これは0から開始する必要があることを意味します。
これは、のほとんどの使用法ではほとんど問題ありませんがUPPIN
、ほとんどの(私の)意図された使用法では完全にオフですNERFIN
。他の言語でのデクリメントループ変数の私の最も一般的な使用法は、「n回繰り返す(nは再利用されない)」イディオムと文字列操作です。これは、とにかくLOLCODEではお勧めできません。
ループの同等の形式または操作不要の形式のループよりも冗長でない方法で、ループをnNERFIN
から1または0にデクリメントするために使用することは可能ですか?UPPIN
代替案の比較
UPPIN
バリアントを使用して543 21を印刷します。
IM IN YR LOOPZ UPPIN YR COWNTR TIL BOTH SAEM COWNTR AN 5
VISIBLE DIFF OF 5 AN COWNTR
IM OUTTA YR LOOPZ
長所:簡潔。
短所:実際のループ変数に直接アクセスすることはできません。
操作不要のバリアントの場合:
I HAS A COWNTR ITZ 5
IM IN YR LOOPZ
VISIBLE COWNTR
COWNTR R DIFF OF COWNTR AN 1
BOTH SAEM COWNTR AN 0, O RLY?
YA RLY, GTFO, OIC
IM OUTTA YR LOOPZ
長所:ループ変数は直接利用できます。
短所:長い。
私が得ることができる最高のものNERFIN
:
IM IN YR LOOPZ NERFIN YR COWNTR TIL BOTH SAEM COWNTR AN -5
VISIBLE SUM OF 5 AN COWNTR
IM OUTTA YR LOOPZ
長所:エラー...使用しNERFIN
ますか?
短所:ループ変数に直接アクセスすることはできません。UPPIN
バリアントよりも読みにくい(ハァッ!) 。冗長性の向上はありません。
TLDRの質問、繰り返し
ループの同等の形式または操作不要の形式のループよりも冗長でない方法で、ループをnNERFIN
から1または0にデクリメントするために使用することは可能ですか?UPPIN
言語仕様レベル1.2でlciインタープリターを使用しています。