をシミュレートすることになっているLOOPの次のプログラム(元のドイツ語の記事も読むことができます)を理解するのに、どういうわけか苦労していIF x=0 THEN A END
ます。
y:=1;
LOOP x DO y:=0 END;
LOOP y DO A END;
IF
これはステートメントをどの程度正確にシミュレートしますか?なぜ私はこれを行うことができないのですか?
x:=0;
LOOP x DO A END;
をシミュレートすることになっているLOOPの次のプログラム(元のドイツ語の記事も読むことができます)を理解するのに、どういうわけか苦労していIF x=0 THEN A END
ます。
y:=1;
LOOP x DO y:=0 END;
LOOP y DO A END;
IF
これはステートメントをどの程度正確にシミュレートしますか?なぜ私はこれを行うことができないのですか?
x:=0;
LOOP x DO A END;
この言語が何であるかはわかりませんが、ゼロより大きい限りLOOP cntr DO stmt END;
実行される(そして各反復後にデクリメントされる)と仮定すると、これは次のように機能します。stmt
cntr
1
に割り当てられy
ます。x
がゼロより大きい場合、がy
割り当てられ0
ます。x
がゼロの場合、の値は残りy
ます1
。次のループでは、前のステートメントが実行されなかった場合、つまりがに等しい場合にのみ、がA
1回実行されます。この構成の主な利点は、1回だけ実行され、ゼロより大きい場合の値ほど多くは実行されないことです。y
1
LOOP
x
0
A
x
LOOP x DO A END;
ロジックをもう一度、ステップバイステップで示します。
y
に設定されています1
y
ゼロx
回に設定されます。これは同等ですIF x <> 0 THEN y:=0 END
A
実行y
回数(ゼロの場合は1x
回、ゼロ以外の場合はゼロ回x
)これらの3つのステップは、次のように変換されます。がゼロの場合は1回実行し、それ以外の場合x
はA
ゼロA
回実行します(つまり実行しない)。