规范对此主题的说明:
迭代循环具有以下形式:
IM IN YR <label> <operation> YR <variable> [TIL|WILE <expression>]
<code block>
IM OUTTA YR <label>
其中 <operation> 可以是 UPPIN(加一)、NERFIN(减一)或任何一元函数。该操作/函数应用于 <variable>,它是临时的,并且是循环的局部变量。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
我在语言规范级别 1.2使用lci 解释器。