2. Utilisation de Prolog II+ Windows. PrologIA HERITAGE II+
A!ociation
Prolog
HERITAGE
2. Utilisation de Prolog II+ Windows
2.1. Lancement et arrêt de Prolog
2.2. Espaces et tailles par défaut
2.3. Syntaxe de la ligne de commande
2.4. Création et exécution d'un programme
2.5. Interruption d'un programme
2.6. Construction et lancement de Prolog avec graphisme
2.7. Compilation et édition de liens
Prolog II+ est le compilateur d'une version avancée du langage Prolog. Le compilateur Prolog II+ Windows vous permet de charger, d'exécuter, d'étendre ou de modifier interactivement un programme Prolog.
Le compilateur est lancé avec un état initial. Lorsque l'on sort de Prolog avec la commande exit, l'état courant du programme est sauvegardé dans un fichier de code binaire, qui pourra être utilisé plus tard comme nouvel état initial. Le fichier
initial.po qui vous est livré est un état initial neuf, c'est-à-dire constitué uniquement d'un superviseur et des règles prédéfinies.
Ce chapitre fournit une description de la façon de lancer le compilateur Prolog II+
Windows, d'y créer un programme et d'en sortir.
Ce chapitre est destiné également à décrire la façon d'utiliser les autres outils du kit
Prolog II+.
2.1. Lancement et arrêt de Prolog
Pour commencer une session, lancez l'exécutable Windows prolog.exe par un moyen quelconque (à travers le Gestionnaire de Programmes, à partir d'un shell...).
Pour terminer une session, lancez l'un des buts Prolog: quit; ou exit;, ou utilisez l'option Quitter du menu principal.
© PrologIA
U 2 - 2
Manuel d'Utilisation Windows
2.1.1. Activation, fichiers par défaut
Si aucun nom de fichier n'est donné dans la commande de lancement, le nom de fichier initial.po est pris par défaut pour le fichier état initial. Exemple sous
MS/DOS:
win prolog
Cette commande lance le compilateur avec l'état initial initial.po recherché d'abord dans le répertoire courant, puis avec le chemin indiqué dans la variable d'environnement PrologDir2. Une erreur survient si un tel fichier n'existe pas. (La commande Prolog exit sauvera l'état du programme dans un fichier appelé prolog.po dans le répertoire courant.)
win prolog myfile.po
Cette commande lance le compilateur avec l'état initial myfile.po. Une erreur survient si un tel fichier n'existe pas.
Au lancement, Prolog crée sa fenêtre Application et la fenêtre Console, puis affiche sa bannière et des informations sur sa configuration puis charge l'état binaire de démarrage.
Le chargement terminé, Prolog se met en attente de commande. Pour cela il affiche un prompt et attend une suite de buts pour l'exécuter. Prolog fonctionnera dans ce mode jusqu'à sa terminaison, produite par l'exécution du but quit ou exit.
2.1.2. Arrêt de Prolog
Lorsque l'on sort de Prolog en exécutant la règle prédéfinie quit ou par un menu, aucun état n'est sauvegardé.
Lorsque l'on sort de Prolog en exécutant la règle prédéfinie exit, l'état courant est sauvegardé sous le nom prolog.po.
Lorsque l'on sort de Prolog en exécutant la règle prédéfinie exit("nom-de-fichier"), alors c'est ce dernier nom qui sera utilisé dans tous les cas pour l'état sauvé produit.
2.2. Espaces et tailles par défaut
L'espace de travail de Prolog est subdivisé en plusieurs espaces. Par défaut, les tailles de ces espaces sont lues dans le fichier binaire initial, à moins d'utiliser l'option de la ligne de commande qui permet de changer le moyen de déterminer ces valeurs initiales qui sont alors:
A!ociation
Prolog
HERITAGE
© PrologIA
A!ociation
Prolog
HERITAGE
Utilisation de Prolog II + Windows
U 2 - 3
espace du code
C'est l'espace où est chargé l'état initial et le code généré par le compilateur. La taille par défaut est de 500 Ko. Il n'y a pas de limite sur la taille des modules, hormis la contrainte que la somme des tailles des modules soit inférieure à l'espace total pour le code.
Lorsque des règles (à fortiori des modules) sont supprimées, l'espace est automatiquement récupéré pour les règles qui ne sont pas en cours d'utilisation.
espace du dictionnaire
Dictionnaire des identificateurs Prolog. Taille par défaut: 200Ko.
espace de la pile de récursion (stack)
Contient les variables locales de la démonstration en cours. Taille par défaut:
100Ko. Il n'y a pas de consommation d'espace dans cette pile dans le cas de récursion terminale (voir chapitre Contrôle de l'effacement des buts du manuel de référence).
espace de la pile de copie (heap)
Le compilateur Prolog II+ utilise une technique de copie de structures, permettant la mise en oeuvre d'un "garbage collector" très performant. La taille par défaut est de 100Ko.
espace de la pile de restauration (trail)
Pile de mémorisation des valeurs à restaurer lors des retours arrière
(backtracking) dans l'exécution en cours. Taille par défaut: 50 Ko. Le
"garbage collector" permet la récupération d'espace dans cette pile en cas de débordement.
espace pour les appels directs en C
C'est un espace de travail pour le codage des arguments lors des appels directs de procédures ou fonctions C par la primitive callC. Taille par défaut: 1 Ko.
Ces tailles par défaut peuvent être modifiées individuellement par des options sur la ligne de commande ou dans le fichier prolog2.pre.
2.3. Syntaxe de la ligne de commande
Dans toutes les descriptions syntaxiques de ce manuel, les éléments facultatifs sont mis entre crochets: [ ], ceux qui peuvent apparaître un nombre quelconque de fois
-éventuellement aucune- sont écrits entre accolades: { }.
© PrologIA
U 2 - 4
Manuel d'Utilisation Windows
Il est possible de mémoriser la commande de lancement de Prolog en l'incluant dans un fichier nommé prolog2.pre qui peut se trouver dans le répertoire courant ou dans le répertoire d'installation de Prolog. En effet, si un tel fichier existe, Prolog traitera toutes les options de ce fichier ne figurant pas déjà sur la ligne de commande (qui a donc priorité). Seule la première ligne est lue, les autres lignes sont ignorées. Le premier mot est aussi ignoré (nom du programme).
La syntaxe de la commande Prolog est: win (sous MS-DOS) prolog [parametres] [etat_initial]
Le nom de fichier etat_initial, donné dans la syntaxe du système hôte, désigne le fichier d'état avec lequel on souhaite démarrer la session Prolog. Si rien n'est spécifié, le nom initial.po est pris par défaut.
Les paramètres peuvent être spécifiés dans un ordre quelconque, ils permettent de modifier les tailles et les options par défaut du compilateur. La liste des paramètres possibles est:
[-H] [-c n] [-C file] [-d n] [-E] [-f fv{fv}] [-h n] [-i file] [j file] {-m file} [-M n] [-o file] [-P parameter] [-q n] [-Q] [-r file] [-R n] [-s n] [-t n]
Signification des paramètres:
-H
(Help) Affiche au démarrage de Prolog, l'aide de la ligne de commande. Pour chaque option affiche également la configuration par défaut.
-c entier
(code) Définit la taille en Ko utilisée pour l'espace des règles, des variables statiques, et des tableaux Prolog.
-C file
(Compilation) Compile le fichier source de nom file, génère un fichier objet.et quitte Prolog. La détermination du nom du fichier objet suit les règles suivantes :
Si l'option -o est utilisée simultanément, c'est le nom désigné dans cette option qui sera utilisé ;
Si le fichier source ne comporte aucun module, c'est le nom empty.mo qui sera utilisé ;
Si le fichier source ne comporte qu'un seul module, c'est ce nom de module, suffixé par .mo qui sera utilisé (si cet unique module est le module vide, c'est le nom user.mo qui sera utilisé ;
Si le fichier source comporte plusieurs modules, c'est le nom du fichier source suffixé par .mo. qui sera utilisé.
-d entier
(dictionnaire) Définit la taille en Ko utilisée pour le dictionnaire.
A!ociation
Prolog
HERITAGE
© PrologIA
A!ociation
Prolog
HERITAGE
Utilisation de Prolog II + Windows
U 2 - 5
-E
(Edinburgh) active Prolog en mode de compatibilité Edinburgh (cf Chapitre
10 du manuel de référence). Est équivalent à l'option -m edinburg.mo. Change la syntaxe et charge les nouvelles règles prédéfinies spécifiques au mode
Edinburgh. La syntaxe Edinburgh suppose que la syntaxe des variables n'est pas la syntaxe Prolog, et la syntaxe des réels est la syntaxe standard. Par conséquent l'utilisation de cette option, modifie la valeur des flags s, v, et r qui vaudra respectivement E, E ou U et S. Le traitement de cette option est réalisé en dernier. Par conséquent, si par l'option -f les flags s et r sont spécifiés, ils seront ignorés et le flag v défini à P sera également ignoré.
-f fv{fv}
(flags) Définit les valeurs des options de comportement de Prolog. Les valeurs par défaut des options sont équivalentes au paramètre:
-f a1A0cIe0g1G0i1o1rPsSuWvPw1zU
fv{fv} est une suite de couples de caractères où dans chaque couple, le premier caractère définit l'option concernée, le second définit sa valeur.
Les options disponibles sont:
option
a
A c i
G e g v w z s u r o
valeurs possibles
0,1
0,1,c,C,d,D,h,H,s,S,t,T
I,M
0,1
0,1
0,1,c,C,d,D,s,S
0,1
0,1
P,S
A,C,I,S
E,F,W
E,P,U
0,1,2
U,D a: (atomes préfixés)
La valeur détermine si l'on doit attribuer automatiquement le préfixe vide
("") aux atomes en position d'argument et non explicitement préfixés :
0 Ces atomes ne seront pas préfixés (attribution du préfixe vide).
1 Ces atomes seront préfixés en fonction du contexte.
A: (réallocation)
La valeur détermine si l'on doit interdire ou permettre la réallocation de l'espace concerné:
1 Toutes les réallocations sont interdites
© PrologIA
U 2 - 6
Manuel d'Utilisation Windows
0 Toutes les réallocations sont permises c (resp. C) La réallocation du code est interdite (resp. permise) d (resp. D) La réallocation du dictionnaire est interdite (resp. permise) h (resp. H) La réallocation de la pile de copie (heap) est interdite (resp.
permise) s (resp. S) La réallocation de la pile de récursion (stack) est interdite
(resp. permise) t (resp. T) La réallocation de la pile de restauration (trail) est interdite
(resp. permise) c: (codage des caractères)
La valeur détermine le type de codage interne des caractères:
I codage selon le jeu ISO 8859-1.
M codage selon le jeu de la machine hôte.
e: (escape mode)
Détermine le mode d'impression des caractères accentués n'appartenant pas au jeu de la machine hôte. Ce flag n'a de signification qu'en mode de codage ISO. Les valeurs possibles sont:
0 le caractère est écrit comme une séquence format_escape -\code octal-
(cf R1.29). Cette option a la particularité de réduire l'ensemble des caractères qui peuvent créer une ambiguité pour l'écriture du "\" (cf R1-
7).
1 le caractère est écrit comme une séquence accent_escape (cf R1.29 à
R1.31).
g: (garbage collection information)
Si la valeur est 1 (option par défaut), un message est imprimé chaque fois qu'il y a récupération mémoire, sinon aucune information n'est imprimée.
G: (garbage collection)
La valeur détermine si l'on doit interdire ou permettre la récupération de mémoire dans l'espace concerné:
1
0
Toutes les récupérations sont interdites
Toutes les récupérations sont permises c (resp. C) La récupération dans le code est interdite (resp. permise) d (resp. D) La récupération dans le dictionnaire est interdite (resp.
permise)
© PrologIA
A!ociation
Prolog
HERITAGE
A!ociation
Prolog
HERITAGE
Utilisation de Prolog II + Windows
U 2 - 7 s (resp. S) La récupération dans les piles est interdite (resp. permise) i: (interprète la lecture du caractère spécial '\')
Si la valeur est 1 (option par défaut), le ou les caractères suivant le '\' sont spécialement interprétés (par exemple la séquence \t signifie le caractère de tabulation). Si la valeur est 0, le caractère '\' perd sa valeur de caractère spécial, il n'est plus possible de le composer avec un format_escape ou un
accent_escape pour représenter un autre caractère, quelle que soit la valeur de l'option e.
o: (optimisation)
Optimisation du code généré (pour: les instructions arithmétiques, les instructions de comparaison, les tests de type, block, val, assign.).
Lorsque cette option est activée, les opérations arithmétiques peuvent donner, lorsqu'on décompile une règle (avec rule par exemple), une suite de termes différente de la suite originale. Il en est de même pour le prédicat block, pour lequel la décompilation donnera, dans certains cas, un terme équivalent mais non identique. Le debugger peut ne pas visualiser certaines opérations arithmétiques, ou certains tests de type, ou encore les arguments de certains prédicats prédéfinis optimisés tels que val, assign ou block. La valeur détermine si l'optimisation est active ou pas.
0 (pas d'optimisation) Le programme apparaît sous sa forme originale lorsqu'on décompile ou lorsqu'on utilise le debugger.
1 (optimisation) C'est la valeur par défaut. L'option s'applique pour tout nouveau code produit par insert, module ou assert.
r: (real)
La valeur détermine la syntaxe à utiliser pour les réels.
P (Prolog) Notation Prolog II (permet l'utilisation simultanée avec la notation infixée des listes).
S (Standard) Notation standard (les réels y sont écrits sous forme abrégée et les listes en notation "crochets". Ex: [1, 2, 3]).
s: (string)
Cette option n'est prise en compte qu'en mode Edinburgh. La valeur définit l'interprétation syntaxique de l'unité lexicale string décrite au § 1.4
du manuel de référence.
A (Atom) L'unité représente un identificateur. Il sera préfixé en fonction du contexte courant de lecture.
C (Character) L'unité représente une liste d'identificateurs d'une lettre. Ils seront préfixés en fonction du contexte courant de lecture.
© PrologIA
U 2 - 8
Manuel d'Utilisation Windows
I (Integer) L'unité représente une liste d'entier égaux respectivement au code (Machine ou ISO, en fonction de l'option choisie) de chaque caractère de la chaîne.
S (String) L'unité représente une chaîne de caractère Prolog.
u: (undefined)
La valeur détermine le comportement lors d'une tentative d'effacement d'une règle non définie. Les valeurs possibles sont:
E (Error) Impression du but en cause et arrêt.
F (Fail) Même comportement que l'interpréteur: échec.
W (Warning) Impression d'un message et échec.
v: (variables)
La valeur détermine la syntaxe à utiliser pour les variables et les identificateurs.
E (Edinburgh) Notation type Edinburgh.
P (Prolog II+) Notation type Prolog II+.
U (Underlined variables) Seules les suites alpha-numériques commençant par "_" dénotent des variables. C'est la forme de base (voir le manuel de référence, chapitre 1).
w: (warning)
Paramètre l'avertissement de certaines configurations étonnantes. N'agit pas sur les messages qui résultent de l'option uW, quand un prédicat appelé n'est pas défini.
0 aucun message n'est donné.
1 prévient en cours d'exécution de l'effacement de :
- block_exit/1 ou block_exit/2 avec une variable libre à la place du numéro d'erreur,
- load/2 ou reload/2 avec une demande de substitution d'un préfixe inexistant,
- save/2 ou kill_module/1 pour un module inexistant,
- suppress/1 ou suppress/2 pour une règle inexistante,
- kill_array/1 d'un tableau non défini.
2 donne les mêmes avertissements qu'en mode 1 et en supplément signale :
- pendant la compilation, les variables non muettes qui n'ont qu'une seule occurence dans la règle (susceptibles de résulter d'une faute de frappe).
z: (lectures des tailles de Prolog)
La valeur détermine la manière de définir les tailles de l'espace de Prolog:
© PrologIA
A!ociation
Prolog
HERITAGE
A!ociation
Prolog
HERITAGE
Utilisation de Prolog II + Windows
U 2 - 9
U lecture des tailles des espaces dans le fichier binaire initial.
D tailles par défaut définies au chapitre 3.
-h entier
(heap) Définit la taille en Ko réservée pour la pile de copie.
-i file
(input) Définit le nom du fichier sur lequel est dirigée l'unité courante de lecture dès le démarrage. Par défaut la lecture se fait à la console.
-j file
(journal) Définit le nom du fichier journal créé par la primitive paper de
Prolog (défaut: "prolog.log").
-m file
(module) Charge au démarrage de Prolog après chargement de l'état binaire le module objet de nom file. Si le fichier n'est pas trouvé dans le répertoire courant, il est cherché dans le répertoire défini par la variable d'environnement
PrologDir2. Si plusieurs de ces options (maximum 20) sont utilisées, elles sont traitées dans l'ordre d'apparition.
-M entier
Temps de réponse maximal accepté, en millisecondes, pour un échange DDE, avant de signaler une erreur.
-o file
(output) Définit le nom du fichier sur lequel est dirigée l'unité de sortie courante dès le démarrage. Par défaut l'écriture se fait dans la "console". La bannière de Prolog apparait toujours dans la console.
-P parameter
Permet de passer un paramètre sur la ligne de commande. Ce paramètre est récupérable depuis Prolog dans le tableau prédéfini de chaînes de caractères
tab_user_param. Si une chaîne vide est rendue, c'est qu'il n'y a plus de paramètres à récupérer. Au maximum 20 paramètres peuvent être transmis sur la ligne de commande. Exemple: prolog -P 1 -P foo
> val(tab_user_param[1], V);
{V = "1"}
> val(tab_user_param[2], V);
{V = "foo"}
> val(tab_user_param[3], V);
{V = ""}
-q entier
Définit la taille en Ko réservée pour le codage des arguments des appels directs de procédures C.
© PrologIA
U 2 - 10
Manuel d'Utilisation Windows
-Q
Permet le démarrage de Prolog à l'état iconique (Quiet).
-r file
Définit le nom du fichier d'erreurs utilisé par Prolog (défaut: "err.txt"). Pour avoir les messages d'erreur en français, choisir le fichier fr_err.txt.
-R entier
(Realloc) Définit le pourcentage d'augmentation de taille pour la réallocation automatique (défaut: 25%).
-s entier
(stack) Définit la taille en Ko réservée pour la pile de récursion et des variables locales.
-t entier
(trail) Définit la taille en Ko réservée pour la pile de restauration (variables à restaurer après backtracking).
A!ociation
Prolog
HERITAGE
2.4. Création et exécution d'un programme
Voici un exemple complet de création et d'exécution d'un programme définissant une petite base de données, démarrant avec l'état de base. $ représente le caractère d'invite du système, > celui de Prolog. Par souci de concision, la règle insert a été utilisée directement, sans appeler l'éditeur.
$ win prolog (sous DOS)
PROLOG II+ ...
...
PrologIA
Prolog est lancé avec l'état initial, les seules règles (ou programmes) présentes en mémoire sont les règles prédéfinies.
>insert;
pere(Jean,Marie) ->; pere(Jean,Pierre) ->;
;
Ici, le programme utilisateur est compilé, il est maintenant connu par
Prolog.
{}
>pere(x,y);
Une exécution de ce programme est lancée.
{x=Jean, y=Marie}
{x=Jean, y=Pierre}
>exit;
On sauve un nouvel état binaire de démarrage contenant le programme utilisateur.
Bye......
$
Le fichier prolog.po a maintenant été créé, contenant un nouvel état (règles prédéfinies et votre programme). Pour repartir avec l'état précédent, relancer Prolog en donnant le nom de fichier correspondant:
© PrologIA
A!ociation
Prolog
HERITAGE
Utilisation de Prolog II + Windows
U 2 - 11
$ win prolog prolog.po
PROLOG II+ ...
...
PrologIA
>pere(Jean,y);
{y=Marie}
{y=Pierre}
>quit;
Bye......
$
Prolog connait maintenant les règles prédéfinies et votre programme.
Vous pouvez lancer une exécution.
On sort sans sauver.
Pour sauvegarder l'état sous un autre nom de fichier, utilisez la commande
exit("nom-de-fichier").
2.5. Interruption d'un programme
A tout instant, un programme Prolog peut être interrompu par la frappe de la commande Ctrl+Pause. Cette interruption est traitée par le système Prolog de gestion des erreurs et correspond à l'erreur 16. Ainsi, elle peut être récupérée par un programme au moyen de la règle prédéfinie block (voir le manuel de référence). Si ce n'est pas le cas, l'erreur remonte jusqu'au niveau de la ligne de commande Prolog, et le message: INTERRUPTION UTILISATEUR est affiché.
2.6. Construction et lancement de Prolog avec graphisme
Pour la première exécution, exécuter la commande de lancement de Prolog avec le module graphique:
C:\> win prolog -m graphic.mo
Après avoir effectué les choix proposés dans le panneau de configuration, il est conseillé de sauver l'état courant afin de ne plus avoir à refaire ces choix:
> save_state("monini.po");
Pour les exécutions suivantes, il suffira alors de lancer la commande:
C:\> win prolog monini.po
2.7. Compilation et édition de liens
Pour une extension de Prolog, il est possible d'utiliser le fichier prouser.c ou bien créer un ou plusieurs autres modules. Il faut ensuite recompiler le(s) module(s) et faire l'édition de liens entre celui(ceux)-ci et la bibliothèque Prolog pour construire le fichier prolog.exe. Ceci est réalisé par le programme prolink.bat.
© PrologIA
U 2 - 12
Manuel d'Utilisation Windows
prolink.bat
Le programme prolink.bat permet de recréer un exécutable de Prolog modifié ou augmenté d'un certain nombre de modules pouvant contenir des descripteurs de données externes. La commande prolink est de la forme : prolink [liste_modules_objets] : [liste_descripteurs]
liste_modules_objets
est une suite de noms (séparés par des blancs) de modules objets compilés auparavant, devant être inclus dans l'exécutable final.
liste_descripteurs
est une suite de noms (séparés par des blancs) de tables de descripteurs (voir le chapitre 7. du manuel de référence) se trouvant dans les modules objets indiqués en premier argument. Si l'on n'a pas créé de table de descripteurs, le deuxième argument peut être supprimé.
Attention: ne pas oublier le caractère blanc de part et d'autre du caractère séparateur
':'.
A!ociation
Prolog
HERITAGE
© PrologIA
A!ociation
Prolog
HERITAGE
Utilisation de Prolog II + Windows
U 2 - 13
© PrologIA
A!ociation
Prolog
HERITAGE

公開リンクが更新されました
あなたのチャットの公開リンクが更新されました。