===== XL language =====
The programming language XL is our implementation of relational growth grammars. XL is built on top of the programming language Java: This combines the advantages of the rule-based paradigm with the strength of Java, including the rich set of existing Java libraries.
==== Rules ====
Rules are specified within a transformation statement. The snowflake curve can be generated by the two rules:
Axiom ==> F(1) RU(120) F(1) RU(120) F(1);
F(x) ==> F(x/3) RU(-60) F(x/3) RU(120) F(x/3) RU(-60) F(x/3);
Behind the scenes, Axiom, F and RU correspond to Java classes of that name. The bound variable x corresponds to a field of class F.
==== Expressions with multiple values ====
XL supports expressions that have multiple values successively. E.g., the expression (* F *) returns all existing objects of class F. Operators like sum perform calculations on those expressions. To get the total length of all F‘s having a diameter greater than one, just write
sum ((* f:F, (f.diameter > 1) *).length)
Especially the graph query expressions of the form (* … *) enable you to specify local or global interactions in a concise and expressive way.
==== More extensions to the java syntax ====
- [[:groimp-platform:xl-lambda|XL-lambda function]]
==== Examples ====
You can find many examples of the XL languages in the [[:Gallery|gallery]].
==== Complete XL documentation ====
An extensive documentation on the XL language specification can be found on the [[https://manual.grogra.de/XL/|grogra website]].
==== Java ====
As XL is based on Java, some coding rules are the same.
For instance, functions are declared with a modifier (public, protected, private,...), a return type (int, void, ...), the function name and the parameters in parenthesis.
Similarly, variables are declared with a type, which is identical to the Java types.