---
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 _]+` 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);
```

# 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 >}}

# 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
'''
```