===== 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.