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