You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Forth语言中退出BEGIN循环?

Forth中退出BEGIN-UNTIL循环的方法

你遇到的问题根源在于EXIT的作用:它会直接从当前定义的词汇(这里是:x)中返回,自然会跳过后续的." end"语句,无法实现仅跳出循环的需求。

Forth没有内置的break语句,但可以通过以下两种方式实现你的需求,同时保持代码整体性:

方法1:复合条件控制BEGIN-UNTIL循环结束

通过调整UNTIL的判断条件,将“提前退出”和“正常循环结束”的逻辑合并,让循环在满足任一条件时终止:

: x 0
    begin
        dup dup . space  \ 输出数字和空格,匹配Python输出格式
        dup 5 = if
            ." break "
            true  \ 推入true,触发UNTIL结束循环
        else
            dup 9 = if  \ 对应Python range(10)的循环上限(i到9为止)
                true
            else
                1+
                false
            then
        then
    until
    drop  \ 清理栈中剩余的数值
    ." end" cr ;

运行x后,输出结果与你给出的Python代码完全一致:

0 1 2 3 4 5 break end

方法2:使用DO-LOOP搭配LEAVE(更贴近Python for循环逻辑)

如果你不需要局限于BEGIN-UNTIL结构,Forth的DO-LOOP是专门的计数循环,搭配LEAVE可以直接实现类似break的功能,写法更地道:

: x
    0 10 do
        i . space
        i 5 = if
            ." break "
            leave  \ 仅退出当前DO-LOOP循环,不会跳出整个词汇
        then
    loop
    ." end" cr ;

LEAVE是Forth中专门用于退出DO-LOOP/LOOP结构的词汇,执行后会直接跳转到循环结束的位置,后续的." end"会正常执行。

内容的提问来源于stack exchange,提问作者user13736218

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.28 04:51:28