On décrit le concept de Prolog en détail, puis nous présenterons une série d’exemples pratiques pour montrer comment le concept est appliqué, puis présenterons quelques exercices simples. Lorsque vous aurez fait les exercices, nous passerons au sujet suivant pour vous donner d’autres indications ou vous suggérer de revoir le sujet actuel avant de passer à autre chose.
Plan de cours
- Introduction
- Notion de programme Prolog
- Création de programmes
- Arithmétique
- Les listes
- Prédicats extra-logiques
- Le coupe-choix
- Décomposition de littéraux
- Décomposition d’un identificateur
- Modification de la base de faits
- Entrées-Sorties
- Entrée de caracteres
- Entrée de mots et de listes de mots
- Ecriture de listes de mots et d’arbres
- Analyse automatique en utilisant les grammaires logiques
- Codage de la grammaire en Prolog
- Une autre application des DCG
Profitez de ce manuel de formation en PDF pour comprendre mieux le Prolog et enrichir votre connaissance.
Commencez à télécharger ce cours adapté pour vous et à apprendre Prolog.
10CHAPITRE 1. INTRODUCTIONA PROLOG1.6.2 Decomposition de litteraux On a quelquefois besoin de manipuler les litteraux eux-m^emes, en particulier lorsqu’oncalcule un but aresoudre. Comme en C-Prolog il n’est pas possible d’ecrire le butX(Y)ouXaurait ete instanciedanslaclauseou il appara^t, il faut d’abord composer le foncteur avantde l’appeler. Ceci peut ^etre fait en utilisant l’operateur=..(nommeunivdepuis la premiereversion de Prolog). Ainsif(a,b,c) =.. XunieraXa[f,a,b,c]. On obtient donc une liste dont le premier element est le foncteur etles autres ses arguments. Donc pour construireX(Y,Z)et l’evaluer, on fera plut^otP =.. [X,Y,Z], call(P). 1.6.3 Decomposition d’un identicateur On peut exploser » ou imploser » le nom d’un identicateur avecname; par exemple :name(chat,X)unieraXalaliste[99,104,97,116]ouchaqueelement correspond au code ASCII ducaractere correspondant de l’identicateur donne comme premier argument. Cette operationest reversible en ce sens que si on donne une liste de codes ASCII comme deuxieme argumentet une variable comme premier, alors on recompose un identicateur. Comme la manipulationde codes ASCII est assez malcommode et rend les programmes diciles a lire, nous denirons a la section suivante un autre predicatnomqui ne travaille qu’en terme d’identicateur (maisil utilisenamede facon interne). 1.6.4 Modication de la base de faits On peut a jouter et retrancher dynamiquement des clauses a un programme : ainsiassert(c(p1,p2)).a joute la clausec(p1,p2)au programme etretract(c(X1,X2))enleve la premiere clause qui s’unie avecc(X1,X2).Cemecanisme est utilise pour transfor-mer des programmes ou pour conserver des informations entre plusieurs executions de clausescar normalement toutes les liaisons de variables sont brisees lors de la n de la preuve.Nous donnons maintenant une illustration de l’arithmetique et de la modication de labase de faits en denissant un predicat permettant de tirer des nombres au hasard ; ceci noussera utile dans certains exemples des prochains chapitres.%% ce qu’il faut pour generer au hasard%% c’est le fichier « hasard.pro »% tirage au sort via un generateur congruentiel lineaire% donne X un nombre reel dans [0,1]hasard(X):-