## 1.9 Alternative Syntax for Control Structures

We can notice that the three control structures (`match/with`

,
`automaton`

and `present`

) combine equations. Each branch is
made of a set of equations defining shared values. In this form, it
is not necessary to give a definition for each shared variable in all the
branches: a shared variable implicitely keeps its previous value or
is absent if it is defined as a signal.

We have adopted this syntactical convention to be close to the graphical
representation of programs in synchronous dataflow tools (such as
Scade/Lustre). In such tools, control structures naturally combine (large) sets of
equations and the implicit completion of absent definitions is
essential.

The language also provides a derived form for control structures
allowing them to be used as expressions. For example:

let node expect x =
automaton
Await -> false unless x then One
| One -> true
end

is a short-cut for:

let node expect x =
let automaton
Await -> do o = false unless x then One
| One -> do o = true done
end in
o

In the same way:

let node two x =
match x with
true -> 1
| false -> 2
end

as a short-cut for:

let node two x =
let match x with
true -> do o = 1 done
| false -> do o = 2 done
end in
o

thus leading to a more conventional notation for the Objective Caml
programmer.