Что говорит спецификация на тему:
Петли итерации имеют вид:
IM IN YR <label> <operation> YR <variable> [TIL|WILE <expression>]
<code block>
IM OUTTA YR <label>
Где < операция > может быть UPPIN (приращение на единицу), NERFIN (декремент одним), или любой унарной функцией. Что операция/функция применяется к <variable> , которая является временной, и локально к контуру. TIL < выражение > оценивает выражение как TROOF: если он оценивает как FAIL, цикл продолжается еще раз, если нет, то выполнение цикла прекращается, и продолжается после соответствия IM OUTTA YR < label. WILE <expression> является обратное: если выражение WIN, выполнение продолжается, иначе петля завершается.
Вопрос
Моя проблема с spec - это комбинация:
- отсутствие инициализатора переменной цикла
- факт, что он временный и локальный для цикла
Как я понимаю, это означает, что он должен начинаться с 0.
В то время как это большинство обычно используется для большинства использования UPPIN
, оно полностью отключается для большинства (моих) целей использования NERFIN
. Мое наиболее распространенное использование переменной декрементирующего цикла на других языках - это "повторение n раз (n не повторно используется)" идиома и строковые операции, что в любом случае не будет хорошей идеей в LOLCODE.
Можно ли использовать NERFIN
для получения декремента цикла от n до 1 или 0 таким образом, чтобы он был менее подробным, чем эквиваленты с UPPIN
или безоперационные формы цикла?
Сравнение альтернатив
Печать 5 4 3 2 1 с вариантом UPPIN
:
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
Плюсы: err... использует NERFIN
?
Против: переменная цикла недоступна; менее читаемый (hah!), чем вариант UPPIN
; нет выгоды в многословии.
Вопрос TL;DR, повторный
Можно ли использовать NERFIN
для получения декремента цикла от n до 1 или 0 таким образом, чтобы он был менее подробным, чем эквиваленты с UPPIN
или безоперационные формы цикла?
Я использую интерпретатор lci на уровне описания языка 1.2.