Previous: , Up: Complex statements   [Contents][Index]


4.7.5 Grouping

FOR loops, LET bindings, and IF statements operate on a single <simple_stmt> (or two <simple_stmt>s in the case of IF OTHERWISE). Operating on multiple <simple_stmt>s—or, more precisely, operating on a single <complex_stmt> that may consist of multiple <simple_stmt>s—is a simple matter of placing the <simple_stmt>s within curly braces. Contrast the following:

FOR 3 REPETITIONS TASK 0 OUTPUTS "She loves me." THEN TASK 0 OUTPUTS
"She loves me not."
-| She loves me.
-| She loves me.
-| She loves me.
-| She loves me not.

FOR 3 REPETITIONS {TASK 0 OUTPUTS "She loves me." THEN TASK 0 OUTPUTS
"She loves me not."}
-| She loves me.
-| She loves me not.
-| She loves me.
-| She loves me not.
-| She loves me.
-| She loves me not.

In other words, everything between ‘{’ and ‘}’ is treated as if it were a single statement. Hence, the FOR loop applies only to the “She loves me” output in the first statement above, while the FOR loop applies to both “She loves me” and “She loves me not” in the second statement.

Variable scoping is limited to the <simple_stmt> in the body of a LET:

LET year BE 1984 WHILE LET year BE 2084 WHILE TASK 0 OUTPUTS year THEN
TASK 0 OUTPUTS year
error→ The second ‘year’ is outside the scope of both ‘LET’ statements.

LET year BE 1984 WHILE {{LET year BE 2084 WHILE TASK 0 OUTPUTS year}
THEN TASK 0 OUTPUTS year}
-| 2084
-| 1984

As indicated by the grammatical rules presented at the beginning of Complex statements, coNCePTuaL does support empty pairs of curly braces, which represent a statement that does nothing and takes no time to execute. While never strictly needed, ‘{}’ may be a convenient mechanism for mechanically produced coNCePTuaL programs.


Previous: , Up: Complex statements   [Contents][Index]

Scott Pakin, pakin@lanl.gov