をシミュレートすることになっている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;実行される(そして各反復後にデクリメントされる)と仮定すると、これは次のように機能します。stmtcntr
1に割り当てられyます。xがゼロより大きい場合、がy割り当てられ0ます。xがゼロの場合、の値は残りyます1。次のループでは、前のステートメントが実行されなかった場合、つまりがに等しい場合にのみ、がA1回実行されます。この構成の主な利点は、1回だけ実行され、ゼロより大きい場合の値ほど多くは実行されないことです。y1LOOPx0AxLOOP x DO A END;
ロジックをもう一度、ステップバイステップで示します。
yに設定されています1yゼロx回に設定されます。これは同等ですIF x <> 0 THEN y:=0 ENDA実行y回数(ゼロの場合は1x回、ゼロ以外の場合はゼロ回x)これらの3つのステップは、次のように変換されます。がゼロの場合は1回実行し、それ以外の場合xはAゼロA回実行します(つまり実行しない)。