关于?DO与DO...LOOP的语法疑问:?DO的IF未闭合问题
Forth中?DO...LOOP的语法说明
首先明确:?DO是Forth专为避免DO循环强制执行一次的场景设计的指令,完全不需要额外搭配IF...THEN结构,不存在所谓“未闭合IF”的问题。
两种写法的对应关系
手动判断跳过循环的写法:
2DUP <> IF DO ... LOOP THEN这里是通过
2DUP <> IF手动判断索引和边界是否不等,再决定是否进入DO循环,最后用THEN闭合IF。官方推荐的
?DO简化写法:?DO ... LOOP?DO已经内置了“索引≠边界时才进入循环”的判断逻辑,相当于把2DUP <> IF DO这部分逻辑打包成了一个指令。因此使用?DO时,不需要手动写IF,自然也不需要额外的THEN来闭合。
简单来说,?DO直接替代了手动写法里的2DUP <> IF DO,整个循环结构就是?DO + 循环体 + LOOP,没有多余的IF/THEN需要处理。
内容的提问来源于stack exchange,提问作者user13736218
相关产品推荐
相关产品推荐

