Lustre (programming language)

Lustre is a formally defined, declarative, and synchronous dataflow programming language for programming reactive systems. It began as a research project in the early 1980s. A formal presentation of the language can be found in the 1991 Proceedings of the IEEE. In 1993 it progressed to practical, industrial use in a commercial product as the core language of the industrial environment SCADE, developed by Esterel Technologies. It is now used for critical control software in aircraft, helicopters, and nuclear power plants.
Structure of Lustre programs.
A Lustre program is a series of "node" definitions, written as:
 node foo(a : bool) returns (b : bool);
 let
 b = not a;
 tel
Where codice_1 is the name of the node, codice_2 is the name of the single input of this node and codice_3 is the name of the single output.
In this example the node codice_1 returns the negation of its input codice_2, which is the expected result.
Inner variables.
Additional internal variables can be declared as follows: 
 node Nand(X,Y: bool) returns (Z: bool);
 var U: bool;
 let
 U = X and Y;
 Z = not U;
 tel
Note: The equations order doesn't matter, the order of lines codice_6 and codice_7 doesn't change the result.
Examples.
Edge detection.
 node Edge (X : bool) returns (E : bool);
 let
 E = false -> X and not pre X;
 tel