do,?do 和循环实现

问题描述 投票:0回答:1

DO ... LOOP
总是至少执行一次。如果我想在 limit = index 时跳过执行,我可以将循环放入
if ... then
:

2DUP <> IF DO ... LOOP THEN 

推荐的替代方案是

?DO ... LOOP

在最后一种情况下,

THEN
去了哪里?据我所知,
?DO
单词包含一个不会闭合的
IF

implementation forth
1个回答
0
投票

单词

?do
可以通过
do
定义如下。

: noop ( -- ) ;
: then, ( orig -- ) postpone then ;

: ?do ( -- do-sys )
  postpone 2dup  postpone =
  postpone if    postpone 2drop
  postpone else
  postpone do  ['] then,
; immediate

: do ( -- do-sys )
  postpone do  ['] noop
; immediate

: loop ( do-sys -- )
  >r postpone loop r> execute
; immediate

: +loop ( do-sys -- )
  >r postpone loop r> execute
; immediate

有了这个

?do
,定义:

: foo  ?do bar baz loop ;

编译为:

: foo  2dup = if 2drop do bar baz loop then ;
最新问题
© www.soinside.com 2019 - 2024. All rights reserved.