我很难理解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
执行一次 if y
is1
仅当前一个LOOP
语句未执行时才会执行一次,即 ifx
等于0
。这种结构的主要优点A
是只执行一次,而不是x
如果它大于零的值LOOP x DO A END;
会执行的次数。
这是逻辑,一步一步:
y
被设定为1
y
设置为零x
次。这相当于IF x <> 0 THEN y:=0 END
A
执行y
次数(一次如果x
为零,零次如果x
非零)这三个步骤转换为:如果x
为零,则执行A
一次,否则执行A
零次(即不执行)。