Euphoria - 直到循环语句



一个loop...until循环类似于while循环,但loop...until循环保证至少执行一次。

语法

loop...until的语法如下:

loop do
   -- Statements to be executed.
until expression

请注意,表达式出现在循环的末尾,因此循环中的语句在表达式值被测试之前会执行一次。

如果表达式返回true,控制流将跳回到do,并且循环中的语句再次执行。此过程重复,直到表达式为false。

示例

#!/home/euphoria-4.0b2/bin/eui

integer a = 10

loop do
   printf(1, "value of a : %d\n", a)
   a = a + 1
until a < 20 

这将产生以下结果:

value of a : 10
value of a : 11
value of a : 12
value of a : 13
value of a : 14
value of a : 15
value of a : 16
value of a : 17
value of a : 18
value of a : 19

loop....with entry语句

通常情况下,循环的第一次迭代在某种程度上是特殊的。在循环开始之前必须做一些事情。它们在启动循环的语句之前完成。

with entry语句很好地满足了这个目的。您需要将此语句与loop...until一起使用,并在您希望第一次迭代开始的位置添加entry关键字。

语法

带entry的loop...until循环的语法如下:

loop with entry do
   -- Statements to be executed.
entry
   -- Initialisation statements.
until expression

在执行expression之前,它会执行初始化语句,然后像普通循环一样开始。之后,这些初始化语句成为循环体的一部分。

示例

#!/home/euphoria-4.0b2/bin/eui

integer a = 10

loop with entry do
   printf(1, "value of a : %d\n", a)
   a = a + 1
entry
   a = a + 2
until a > 20

这将产生以下结果:

value of a : 12
value of a : 15
value of a : 18

loop....label语句

一个loop...until循环可以在第一个do关键字之前包含一个label子句。您可以在enter子句之前或之后保留label子句。

此标签仅用于命名循环块,标签名称必须是包含一个或多个单词的双引号常量字符串。label关键字区分大小写,应写为label

语法

带label子句的loop...until循环的语法如下:

loop label "Label Name" do
   -- Statements to be executed.
until expression

当您使用嵌套循环时,标签非常有用。您可以使用带标签名称的continueexit循环控制语句来控制循环的流程。

示例

#!/home/euphoria-4.0b2/bin/eui

integer a = 10
integer b = 20

loop label "OUTER" do
   printf(1, "value of a : %d\n", a)
   a = a + 1
   
   loop label "INNER" do
      printf(1, "value of b : %d\n", b)
      b = b + 1
      
      if b > 25 then
         continue "OUTER"  -- go to start of OUTER loop
      end if
   until b > 30
until a > 20

这将产生以下结果:

value of a : 10
value of b : 20
value of b : 21
value of b : 22
value of b : 23
value of b : 24
value of b : 25
value of a : 11
value of b : 26
value of a : 12
value of b : 27
value of a : 13
value of b : 28
value of a : 14
value of b : 29
value of a : 15
value of a : 16
value of a : 17
value of a : 18
value of a : 19

注意 - 上述示例应该按解释的那样工作,但看起来Euphoria解释器存在一些问题,并且它按预期工作,可能在Euphoria的未来版本中会修复。

euphoria_loop_types.htm
广告