Constant definition
Basic definitions
Constant is defined by keyword let
followed by its name. Then follows equals sign =
and its value which can be any expression. At the end of constant definition is semicolon ;
. In value expression is possible to use earlier defined constants, functions, operators etc. You can look at list of predefined constants, functions and operators. It is also possible to define new function, details about that are on function definition page.
Input
1 2 3 4 5 6 | // constant definition example 01 let a = 3; let b = (2 + 2) * 2 ^ 2; let c = sqrt(a * b); let a = 0; process Constants with ConstantDumper; |
Output
a = 0; b = 16; c = 6.92820323027551;
Global and local scope
Constants can be defined in global scope or in local scope of some L-system.
Input
1 2 3 4 5 6 7 | // constant definition example 02 let glob = 8; lsystem Lsystem { let loc = 7; set symbols axiom = A(glob) B(loc); } process all with SymbolPrinter; |
Output
A(8) B(7)
Constants defined in local scope overlays constants from global scope, but they do not affect them.
Input
1 2 3 4 5 6 7 8 9 10 11 12 | // constant definition example 03 let x = 8; lsystem LsystemA { let x = 0; // x is 0 only in this L-system set symbols axiom = A(x); } lsystem LsystemB { // x is 8 here set symbols axiom = B(x); } process all with SymbolPrinter; |
Output
A(0)
B(8)
Inheritance of constants
Inheritance of constants works as expected. Constants from derived L-systems are defined and new constants can redefine them.
Input
1 2 3 4 5 6 7 8 9 10 | // constant definition example 04 abstract lsystem Base { let a = 1; let b = 2; } lsystem Derived extends Base { let a = 3; set symbols axiom = A(a) B(b); } process all with SymbolPrinter; |
Output
A(3) B(2)
Formal grammar
Defines constant with name represented by token ID
as value of expression
. If constant with same name already exists, it is redefined by new definition.
1 | constant_def = 'let' ID '=' expression ';' |