Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/loops/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Loops LOLCODE中的NERFIN循环操作有什么好处?_Loops_Decrement_Lolcode - Fatal编程技术网

Loops LOLCODE中的NERFIN循环操作有什么好处?

Loops LOLCODE中的NERFIN循环操作有什么好处?,loops,decrement,lolcode,Loops,Decrement,Lolcode,迭代循环的形式如下: 优点:简洁 缺点:无法直接访问实际循环变量 对于无操作变型: 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 N

迭代循环的形式如下:

优点:简洁
缺点:无法直接访问实际循环变量

对于无操作变型:

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
以比
UPPIN
或无操作形式的循环更详细的方式将循环减量从n减至1或0


我使用的是语言规范级别1.2。

从2007年开始就有关于这个主题的设计讨论。当时的共识似乎建议从
中添加一个
,作为工作组希望快速进入1.2的解决方案:

该问题已提交,未纳入1.2规范。但是,1.3规范中显然存在该问题:

但仍在进行中。我检查过了,它还不在存储库的“未来”分支中。我们可以通过查看循环解释器代码来了解这一点。自2011年8月24日起(在版本72c983d0667d4d650657e1b7c5f4c7054096b0dd中),它仍然始终最初分配0的循环变量a
NUMBR

然而,即使使用旧规范,理论上也可以使用
TROOF
与-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
修改循环变量:


然而,由于这似乎是代码中的一个bug,而不是规范中的一个遗漏,因此它更有可能在1.3版本之前得到修复。修补
解释器.c
表示
如果(0&&stmt->update->type==ET\u OP)
使
倒计时测试的代码按预期运行。如果您不必与未修补的安装共享代码,那么它可能是现有1.2 LOLCODE部署的合适的临时解决方案。

恐怕我们的CTO永远不会允许我们在生产中为解释器运行混合修补级别。另一方面,我们非常严格的LOL编码风格规则在理论上可能已经阻止了所有兼容的代码运行到这种边缘情况,因此我们可能能够在整个操作中进行修补和碰撞。您的修补程序是否与航空航天和医疗应用程序一样正常?如果是这样的话,请直接将您的咨询账单发送给会计部。对于医疗应用来说可能没问题,但航空航天测试已经…嗯,没有结论:@哎呀!这个问题是完全合理的。在答案的末尾,严肃性倾向于下降一点,但问题是纯粹的。
IM IN YR LOOPZ NERFIN YR COWNTR TIL BOTH SAEM COWNTR AN -5
  VISIBLE SUM OF 5 AN COWNTR
IM OUTTA YR LOOPZ
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