如何在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
相关产品推荐
相关产品推荐

