Le REPL
Charge un programme sans --test et tu es dans le REPL : une session interactive où tu interroges, modifies et inspectes le programme, point fixe recalculé à chaque changement.
Interroger
Tape un but suivi d'un point — le moteur donne toutes les réponses :
?- impacte(web, X).
X = api
X = db
Un but qui n'a aucune solution répond false. ; un but clos (sans variable) répond true. ou false..
Modifier la session
?- :assert depend(batch, db).
ok — fait asséré. Fix v3.1.0 — 4 faits, 2 règles → fixpoint : 10 faits| Commande | Effet |
|---|---|
:assert Clause. | ajoute un fait ou une règle (le point fixe est recalculé) |
:retract Clause. | retire un fait ou une règle |
:load <fichier> | ingère un autre .fix dans la session courante |
:reload | recharge le fichier source depuis zéro (refusé en mode base) |
Chaque :assert/:retract re-typecheck juste ce qu'il faut : une clause mal typée est refusée comme à la compilation (le typage fort n'a pas de porte dérobée).
Inspecter et sauvegarder
| Commande | Effet |
|---|---|
:listing | affiche les faits et règles du programme courant |
:save <fichier> | écrit la session (règles + faits d'entrée) dans un .fix rechargeable |
:db | (mode base) diagnostic : chemin, transactions, tailles |
Se documenter, sans quitter
| Commande | Effet |
|---|---|
:help <sujet> | la fiche d'un sujet ou d'un code de refus (:help types, :help rule_growing) |
:demo <sujet> | rejoue un exemple canonique dans un bac à sable — quit revient, session restaurée |
:quit | :halt | sortir (alias nus : quit, halt, exit) |
La doc vit dans le moteur : :help lit le même catalogue interrogeable que le reste — Lire un refus.
Et ensuite
- Persister la session sur disque → La persistance
- Piloter le REPL par un agent → Le serveur MCP