--- title: "Syntaxe" weight: 20 --- # Rayons Soit une variable de la forme `[A-Z] [A-Z 0-9 _ -]* '*` ou un symbole de fonction polarisé ou non par `+` ou `-` de la forme `(+|-)?[a-z 0-9] [a-z A-Z 0-9 _ -]* '* '?'?` appliqué à une séquence ordonnée d'autres rayons en arguments (séquence possiblement vide dans le cas d'une constante) : `X`, `a`, `f(X)`, `+f(X)`, `-f(-h(a, Y1), X2)`, `+add-dec(0, 2, 2)`. Les virgules séparant les arguments peuvent être omises : `-f(-h(a Y1) X2)`, `+add-dec(0 2 2)`, `string(hello i am X)`. # Concaténation Un symbole de fonction binaire infixe `:` est disponible et peut être utilisé pour écrire confortablement une concaténation de rayons : `a:X`, `a:b:b:X`, `f(a:X):+f(0:1:X):-f(Y)`. # Etoiles Une séquence non-ordonnée de rayons terminant par un point-virgule `;`: ``` X a +f(X); ``` L'étoile vide est `[]`. # Constellations Une séquence non-ordonnée d'étoiles : ``` X a +f(X); -f(-h(a Y1) X2); +add-dec(0 2 2); ``` Toutes les variables sont locales à leur étoile. Donc, toutes les occurrences de `X` de la première ligne sont en fait distinctes de celles de la seconde ligne. {{< hint info >}} Il n'y a pas de sensibilité à l'indentation ou aux sauts de ligne. {{< /hint >}} La constellation vide est `{}` (elle peut apparaître en résultat mais on ne peut pas l'écrire en tant qu'utilisateur). # Focus Pour choisir des points de départ du calcul, il est possible de préfixer certaines étoiles (de notre choix) avec un symbole de *focus* `@`. ``` @X a +f(X); @-f(-h(a Y1) X2); +add-dec(0 2 2); ``` # Commentaires ``` 'commentaire sur une seule ligne 'un autre commentaire ''' commentaire sur plusieurs lignes ''' ```