LOLCODE中的NERFIN循环操作有什么用?
|
规格说明:
迭代循环的形式为:
可能是UPPIN
(递增1),NERFIN(递减
一)或任何一元函数。那
操作/功能适用于
,这是临时的,并且
局部于循环。瓷砖
计算表达式
TROOF:如果评估为失败,
循环再次继续,如果没有,
然后循环执行停止,并且
匹配的IM OUTTA之后继续
YR <标签>。 WILE <表达式>是
相反:如果表达式是
WIN,执行继续,否则
循环退出。
题
我对规范的抱怨是:
缺少循环变量初始化器
它是临时的,是循环的局部事实
据我了解,这意味着它必须从0开始。
尽管大多数用法对ѭ1most来说都可以,但对于大多数(我)对
IM IN YR <label> <operation> YR <variable> [TIL|WILE <expression>]
<code block>
IM OUTTA YR <label>
其中NERFIN
的预期用途却完全不适用。在其他语言中,递减循环变量的最常见用法是“重复n次(不重复使用)”惯用语和字符串操作,无论如何在LOLCODE中都不是好主意。
是否可以使用NERFIN
使循环从n减至1或0,而不比than1等效项或无操作的循环形式那么冗长?
替代方案的比较
使用UPPIN
打印5 4 3 2 1:
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,而不比than1等效项或无操作的循环形式那么冗长?
我正在使用语言规范级别1.2的lci解释器。
没有找到相关结果
已邀请:
1 个回复
殿虫
不幸的是,有一个“效率破解”,它阻止循环内的代码使用
修改循环变量: https://github.com/justinmeza/lci/blob/a6ef5811e8eb98935a16600b799bccbe4adffdde/interpreter.c#L3408 但是由于这似乎是代码中的错误,而不是规范中的遗漏,因此更有可能在1.3版本之前得到修复。修补ѭ19表示
可使
的代码按预期运行。如果您不必与未修补的安装共享代码,则它可能是适用于现有1.2 LOLCODE部署的临时解决方案。