title: What good is the NERFIN loop operation in LOLCODE?
body: <h2><a href="http://lolcode.com/specs/1.2#loops" rel="noreferrer">What the spec says on the subject:</a></h2>
  
  <blockquote>
    <p>Iteration loops have the form:</p>
  </blockquote>
  
  <pre><code>IM IN YR &lt;label&gt; &lt;operation&gt; YR &lt;variable&gt; [TIL|WILE &lt;expression&gt;]  
    &lt;code block&gt;
  IM OUTTA YR &lt;label&gt;
  </code></pre>
  
  <blockquote>
    <p>Where &lt;operation> may be UPPIN
    (increment by one), NERFIN (decrement
    by one), or any unary function. That
    operation/function is applied to the
    &lt;variable>, which is temporary, and
    local to the loop. The TIL
    &lt;expression> evaluates the expression
    as a TROOF: if it evaluates as FAIL,
    the loop continues once more, if not,
    then loop execution stops, and
    continues after the matching IM OUTTA
    YR &lt;label>. The WILE &lt;expression> is
    the converse: if the expression is
    WIN, execution continues, otherwise
    the loop exits.</p>
  </blockquote>
  
  <h2>Question</h2>
  
  <p>My gripe with the spec is the combination of:</p>
  
  <ul>
  <li>the lack of a loop variable initializer </li>
  <li>the fact it's temporary and local to the loop</li>
  </ul>
  
  <p>As I understand it, this means it <em>has</em> to start at 0.</p>
  
  <p>While that's mostly ok for most uses of <code>UPPIN</code>, it's totally off for most (my) intended uses of <code>NERFIN</code>.  My most common uses of a decrementing loop variable in other languages are the "repeat <em>n</em> times (<em>n</em> not re-used)" idiom and string operations, which wouldn't be a good idea in LOLCODE anyway.</p>
  
  <p>Is it possible to use <code>NERFIN</code> to get a loop decrement from <em>n</em> to 1 or 0 in a way that's less verbose than the equivalents with <code>UPPIN</code> or the operationless forms of looping?</p>
  
  <h2>Alternatives' comparison</h2>
  
  <p>Printing 5 4 3 2 1 with the <code>UPPIN</code> variant:</p>
  
  <pre><code>IM IN YR LOOPZ UPPIN YR COWNTR TIL BOTH SAEM COWNTR AN 5
    VISIBLE DIFF OF 5 AN COWNTR
  IM OUTTA YR LOOPZ
  </code></pre>
  
  <p><strong>Pros:</strong> concise. <br>
  <strong>Cons:</strong> actual loop variable is not accessible directly.</p>
  
  <p>With the operationless variant:</p>
  
  <pre><code>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
  </code></pre>
  
  <p><strong>Pros:</strong> loop variable is directly available. <br>
  <strong>Cons:</strong> longer.</p>
  
  <p>Best I can get with <code>NERFIN</code>:</p>
  
  <pre><code>IM IN YR LOOPZ NERFIN YR COWNTR TIL BOTH SAEM COWNTR AN -5
    VISIBLE SUM OF 5 AN COWNTR
  IM OUTTA YR LOOPZ
  </code></pre>
  
  <p><strong>Pros:</strong> err... uses <code>NERFIN</code>? <br>
  <strong>Cons:</strong> loop variable isn't directly accessible; less readable (hah!) than the <code>UPPIN</code> variant; no gain in verbosity.</p>
  
  <h2>TLDR question, repeated</h2>
  
  <p>Is it possible to use <code>NERFIN</code> to get a loop decrement from <em>n</em> to 1 or 0 in a way that's less verbose than the equivalents with <code>UPPIN</code> or the operationless forms of looping?</p>
  
  <p>I'm using <a href="http://icanhaslolcode.org/" rel="noreferrer">the lci interpreter</a> at language specification level 1.2.</p>