gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-03 10:29:36 25 4
gpt4 key购买 nike

What the spec says on the subject:

Iteration loops have the form:


IM IN YR <label> <operation> YR <variable> [TIL|WILE <expression>]  
<code block>
IM OUTTA YR <label>

Where <operation> may be UPPIN (increment by one), NERFIN (decrement by one), or any unary function. That operation/function is applied to the <variable>, which is temporary, and local to the loop. The TIL <expression> evaluates the expression as a TROOF: if it evaluates as FAIL, the loop continues once more, if not, then loop execution stops, and continues after the matching IM OUTTA YR <label>. The WILE <expression> is the converse: if the expression is WIN, execution continues, otherwise the loop exits.





我对规范的提示是:
  • 缺少循环变量初始化器
  • 事实上,它是循环的临时和局部的

  • 据我了解,这意味着它必须从 0 开始。

    虽然这对于 UPPIN 的大多数用途来说基本没问题,对于 NERFIN 的大多数(我的)预期用途来说,它是完全关闭的。 .我在其他语言中对递减循环变量的最常见用途是“重复 n 次(n 未重用)”习语和字符串操作,无论如何这在 LOLCODE 中都不是一个好主意。

    是否可以使用 NERFIN以比 UPPIN 的等价物更简洁的方式获得从 n 到 1 或 0 的循环递减还是无操作的循环形式?

    替代品的比较

    使用 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以比 UPPIN 的等价物更简洁的方式获得从 n 到 1 或 0 的循环递减还是无操作的循环形式?

    我正在使用 the lci interpreter在语言规范级别 1.2。

    最佳答案

    2007 年就有关于这个确切主题的设计讨论。当时的共识似乎建议添加 FROM作为工作组希望快速进入 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 NUMBR共 0 个:

    https://github.com/justinmeza/lci/blob/72c983d0667d4d650657e1b7c5f4c7054096b0dd/interpreter.c#L3434

    但是,即使使用旧规范,理论上也应该可以使用 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 修改循环变量。 :

    https://github.com/justinmeza/lci/blob/a6ef5811e8eb98935a16600b799bccbe4adffdde/interpreter.c#L3408

    然而,由于这似乎是代码中的错误而不是规范中的遗漏,因此更有可能在 1.3 版本之前得到修复。补丁 interpreter.cif (0 && stmt->update->type == ET_OP)countdown-test.lol 制作代码按预期运行。如果您不必与未修补的安装共享代码,它可能是现有 1.2 LOLCODE 部署的合适临时解决方案。

    关于loops - LOLCODE 中的 NERFIN 循环操作有什么好处?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6124995/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com