FOR 1g 2023-04-17 laplante@plcb.ca GOWEB/Language


title: “FOR” author: “laplante@plcb.ca” date: 2023-04-17 version: “1.0.0” section: “1g”

category: “GOWEB/Language”

FOR

Description

The for statement is used to create loops in GoWeb.
It provides three main forms of iteration:

  1. For increment – the classic loop with initialization, condition, and increment.
  2. For expression – a loop controlled by a logical expression.
  3. For in – iteration over arrays and maps.

This flexibility allows for loops to handle numeric ranges, condition-based repetition, and direct traversal of collections.


For Increment

A for increment loop in GoWeb follows the syntax:

forincr:     FOR forinit ; logical_expression ; forend { stmt_list }

Examples

res={{
    for pierre := 1 ;
    pierre < 10;
    pierre = pierre + 1 {
        pierre;
    }
}}.

return 

res=123456789.

res={{
    for pierre := 1 ; pierre < 10; pierre = pierre + 1 {
        "P"; pierre; " ";
        for chantal := pierre; chantal < 10 ; chantal = chantal + 1 {
            "C"; chantal; " ";
        }
    }
}}.

return 

res=P1 C1 C2 C3 C4 C5 C6 C7 C8 C9 P2 C2 C3 C4 C5 C6 C7 C8 C9 P3 C3 C4 C5 C6 C7 C8 C9 P4 C4 C5 C6 C7 C8 C9 P5 C5 C6 C7 C8 C9 P6 C6 C7 C8 C9 P7 C7 C8 C9 P8 C8 C9 P9 C9 .

For Expression

A for expression loop has the following syntax:

forexpr:     FOR logical_expression { stmt_list }

Examples

res={{
    i := 50;
    for i > 0 {
        i; ' ';
        i = i - 2;
    }
}}.

res=50 48 46 44 42 40 38 36 34 32 30 28 26 24 22 20 18 16 14 12 10 8 6 4 2 .

res={{
    i := 5;
    for i > 0 {
        'i='; i; ' ';
        i = i - 1;
        j := i;
        for j > 0 {
            'j='; j; ' ';
            j = j - 1;
            k := j;
            for k > 0 {
                'k='; k; ' ';
                k = k - 1;
            }
        }
    }
}}.

res=i=5 j=4 k=3 k=2 k=1 j=3 k=2 k=1 j=2 k=1 j=1 i=4 j=3 k=2 k=1 j=2 k=1 j=1 i=3 j=2 k=1 j=1 i=2 j=1 i=1 .

For In

A for in loop is used to iterate over arrays or maps.

Examples

res={{
    var := [1,2,3];
    var2 := [4,5];
    var3 := { "x1" : 1, "x2" : 2.2, "x3" : true, "x4": "string", "x5":[7,8,9]};

    for i in var {
        "i="; i; "\n";
        for j in var2 {
            "\tj="; j; "\n";
            for k in var3 {
                "\t\tk="; k; "\n";
            }
        }
    }
}}

return 

res=i={"index":0,"value":1}
    j={"index":0,"value":4}
        k={"index":0,"key":"x1","value":1}
        k={"index":1,"key":"x2","value":2.2}
        k={"index":2,"key":"x3","value":true}
        k={"index":3,"key":"x4","value":"string"}
        k={"index":4,"key":"x5","value":[7,8,9]}
    j={"index":1,"value":5}
        k={"index":0,"key":"x1","value":1}
        k={"index":1,"key":"x2","value":2.2}
        k={"index":2,"key":"x3","value":true}
        k={"index":3,"key":"x4","value":"string"}
        k={"index":4,"key":"x5","value":[7,8,9]}
i={"index":1,"value":2}
    j={"index":0,"value":4}
        k={"index":0,"key":"x1","value":1}
        k={"index":1,"key":"x2","value":2.2}
        k={"index":2,"key":"x3","value":true}
        k={"index":3,"key":"x4","value":"string"}
        k={"index":4,"key":"x5","value":[7,8,9]}
    j={"index":1,"value":5}
        k={"index":0,"key":"x1","value":1}
        k={"index":1,"key":"x2","value":2.2}
        k={"index":2,"key":"x3","value":true}
        k={"index":3,"key":"x4","value":"string"}
        k={"index":4,"key":"x5","value":[7,8,9]}
i={"index":2,"value":3}
    j={"index":0,"value":4}
        k={"index":0,"key":"x1","value":1}
        k={"index":1,"key":"x2","value":2.2}
        k={"index":2,"key":"x3","value":true}
        k={"index":3,"key":"x4","value":"string"}
        k={"index":4,"key":"x5","value":[7,8,9]}
    j={"index":1,"value":5}
        k={"index":0,"key":"x1","value":1}
        k={"index":1,"key":"x2","value":2.2}
        k={"index":2,"key":"x3","value":true}
        k={"index":3,"key":"x4","value":"string"}
        k={"index":4,"key":"x5","value":[7,8,9]}

res={{
    v := [1,2,3];

    for i in v {
        "i="; i;
        k := i.index;
        v[k] = 2*k;
    }
    "v="; v;
    "i="; i;
}}
res=i={"index":0,"value":1}i={"index":1,"value":2}i={"index":2,"value":3}v=[0,2,4]i={"index":2,"value":3}