LOLCODE中的NERFIN循环操作有什么用?

| 规格说明:   迭代循环的形式为:
IM IN YR <label> <operation> YR <variable> [TIL|WILE <expression>]  
  <code block>
IM OUTTA YR <label>
  其中可能是UPPIN   (递增1),NERFIN(递减   一)或任何一元函数。那   操作/功能适用于   ,这是临时的,并且   局部于循环。瓷砖   计算表达式   TROOF:如果评估为失败,   循环再次继续,如果没有,   然后循环执行停止,并且   匹配的IM OUTTA之后继续   YR <标签>。 WILE <表达式>是   相反:如果表达式是   WIN,执行继续,否则   循环退出。 题 我对规范的抱怨是: 缺少循环变量初始化器 它是临时的,是循环的局部事实 据我了解,这意味着它必须从0开始。 尽管大多数用法对ѭ1most来说都可以,但对于大多数(我)对
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解释器。     
已邀请:
从2007年开始就这个确切的主题进行了设计讨论。当时的共识似乎建议添加“ѭ14”作为工作组希望快速进入1.2的解决方案: http://forum.lolcode.com/viewtopic.php?pid=2484 该问题已提交,但未纳入1.2规范。但是,显然在1.3规范中: http://lolcode.com/proposals/1.3/loop2 仍然在工作中。我检查了一下,它还没有在存储库的\“ future \”分支中。通过查看循环解释器代码,可以看到这一点。截至2011年8月24日(在修订版72c983d0667d4d650657e1b7c5f4c7054096b0dd中),它始终始终始终将循环变量a的“ 15”分配为0: https://github.com/justinmeza/lci/blob/72c983d0667d4d650657e1b7c5f4c7054096b0dd/interpreter.c#L3434 但是,即使使用旧规范,从理论上讲,也应该可以结合使用ѭ16和针对-1的测试,以允许相对干净的形式从5倒数到0:
BTW countdown-test.lol
CAN HAS STDIO?
HAI 1.2

HOW DUZ I COUNTDOWN YR BOWNDZ
    I HAS A FIRSTIES
    FIRSTIES R WIN
    IM IN YR LOOPZ NERFIN YR COWNTR TIL BOTH SAEM COWNTR AN -1
        FIRSTIES
        O RLY?
            YA RLY
                COWNTR R BOWNDZ
                FIRSTIES R FAIL
        OIC

        VISIBLE COWNTR

    IM OUTTA YR LOOPZ
IF U SAY SO

COUNTDOWN 5

KTHXBYE
不幸的是,有一个“效率破解”,它阻止循环内的代码使用
R
修改循环变量: https://github.com/justinmeza/lci/blob/a6ef5811e8eb98935a16600b799bccbe4adffdde/interpreter.c#L3408 但是由于这似乎是代码中的错误,而不是规范中的遗漏,因此更有可能在1.3版本之前得到修复。修补ѭ19表示
if (0 && stmt->update->type == ET_OP)
可使
countdown-test.lol
的代码按预期运行。如果您不必与未修补的安装共享代码,则它可能是适用于现有1.2 LOLCODE部署的临时解决方案。     

要回复问题请先登录注册