Euphoria - O laço até a declaração

UMA loop...until loop é semelhante a um loop while, exceto que um loop ... until loop tem garantia de execução pelo menos uma vez.

Sintaxe

A sintaxe de um loop ... até que seja a seguinte -

loop do
   -- Statements to be executed.
until expression

Observe que a expressão aparece no final do loop, portanto, as instruções no loop são executadas uma vez antes de o valor da expressão ser testado.

Se a expressão retornar true, o fluxo de controle salta de volta para fazer e as instruções no loop são executadas novamente. Este processo se repete até que a expressão seja falsa.

Exemplo

#!/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

Isso produz o seguinte resultado -

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

O loop .... com declaração de entrada

Geralmente, a primeira iteração de um loop é de alguma forma especial. Algumas coisas precisam ser feitas antes do início do loop. Eles são feitos antes da instrução iniciar o loop.

o with entrydeclaração serve muito bem ao propósito. Você precisa usar esta instrução com loop ... até e apenas adicionar oentry palavra-chave no ponto em que deseja que a primeira iteração comece.

Sintaxe

A sintaxe de um loop ... até que o loop com entrada seja a seguinte -

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

Antes de executar a expressão, ele executa instruções de inicialização e, em seguida, começa como um loop normal. Posteriormente, essas instruções de inicialização se tornam parte do corpo do loop.

Exemplo

#!/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

Isso produz o seguinte resultado -

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

O loop .... declaração de rótulo

UMA loop...until loop pode ter um label cláusula antes da primeira dopalavra-chave. Você pode manter a cláusula de rótulo antes ou depoisenter cláusula.

Este rótulo é usado apenas para nomear o bloco de loop e os nomes dos rótulos devem ser strings constantes entre aspas duplas com uma ou várias palavras. A palavra-chave do rótulo diferencia maiúsculas de minúsculas e deve ser escrita comolabel.

Sintaxe

A sintaxe de um loop ... até com a cláusula label é a seguinte -

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

Os rótulos são muito úteis quando você usa loops aninhados. Você pode usarcontinue ou exit instruções de controle de loop com nomes de rótulo para controlar o fluxo de loops.

Exemplo

#!/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

Isso produz o seguinte resultado -

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

NOTE - O exemplo acima deve funcionar conforme explicado, mas parece que o interpretador Euphoria está com algum problema e está funcionando como esperado, pode ser que seja corrigido em versões futuras do Euphoria.