Home
Prolog III - Colmerauer, Alain
Contents
1. 128 3 Premiers exemples de pros tammes s ss sanitaire 129 Un ou sur deux variables 129 Un Gu s r une listen petear aE e a O nl TAS aiea NTER 130 Au plusun d Vrai een a E est E 131 K l ments vrais dans une liste de n bool ens 133 4 D autres exemples siennes 135 Pannes dans un additionneur binaire 135 Un puzzle logique snenie ER a Nr tennis tiuienne 143 RetardementS nine nn er nn ne Ten Ne tn ere em es 147 Te M OdUC HOME Sas ins ne SN ten es 148 2 Termes CONNUS ne en este nie 148 Les pr dicats valuables known bound et free 148 3 Retardement de l ex cution d un but 149 4 Contraintes r tafd eSiis niii nissai eaa 151 Tailles r tard s is ninn a ri a O EE Eo EATR 151 Concat nation retard e 154 Contraintes num riques retard es ss 156 Le contr le et l environnement des programmes 161 T CECOntr le ss te ne etienne 162 2 Expressions variables statiques tableaux 168 Expressions AHLRM MQUES nus den ten 168 Affectation Tableaux n nhan a MS dde EIN de de 173 3 Structuration saisie et modification des r gles 176 Familles d id ntificateurs natacion E O a 177 Partie f rm e d un famille i e 178 Contexte de lecture et d criture ss 179 Modules en E E EE E en errant dune ee set eee 184 Ajout suppression et recherche de r gles 186 Manipulation de modules objets 191 Le L
2. 1008 Espaces et tailles par d faut 1009 4 A propos de l ENvVirOnN Ment sishalseshnsasoine nan 1009 Utilisation d un diteur Ml tn er meet 1009 5 Ajout d regles Dr d IMI S a nain ne ta Ah ad 1010 March PVR nantes Nr Us 1011 Appel d une r gle externe 1012 Proc dures de transfert de donn es 1013 Premier protocole de transfert de donn es 1014 Fonctions g n rales aiak 1014 ProloglA xi Table des mati res Fonctions de conversion u 1016 Second protocole de transfert de donn es 1018 Transfert de donn es simples de Prolog vers C 1018 Transfert de donn es simples de C vers Prolog 1020 Un ex mpl complet it ne eee 1022 6 Appeler Prolog II depuis le langage Cest uns 1025 Itroducti n rentes i a ni it a e E eE EN 1025 Description des fonctions 1025 InitialiSati n sise trier in r aier ea 1025 Appeli teener An STE eee 1026 Tefminaisoh inenen ne el E E li At Rent 1027 Un petit exemplen re tirent Rs ee nt est fr 1028 LISINO Tarn TEE ee en ttes 1030 Index G n ral sinsin aaria 1033 Manuel de mise au point D buggeur et mise au point de programmes Prolog II nssesesesesseseses0e 2001 1 Introductionis rintisan isien as 2002 25 Trace EXO en aia 2003 3 Aper u du mod le des boites niet 2004 Quelq es d finitions sind Mir ee te
3. La r gle d arr t exprime qu il n y a pas au moins un l ment vrai dans la liste vide il n y en a bien s r aucun L autre proc de r cursivement en calculant le ou sur la t te de liste et sur le ou de la queue de liste Quelques ex cutions pour y voir un peu plus clair gt Ou lt 1 b1 0 gt 1 bl bool La liste comportant d ores et d j un l ment dont la valeur est vrai aucune contrainte ne porte sur b1 si l on excepte le fait que b1 doit repr senter une valeur bool enne 130 ProloglA Bolig Les contraintes bool ennes gt Ou lt b1 b1 b1 gt 1 b1 1 Ici pour qu il y ait au moins un l ment vrai dans une liste compos e de trois fois la m me variable il faut bien s r que cette variable repr sente la valeur vrai gt Ou lt b1 b2 b3 gt b b gt b1 b2 b3 DL gt bb b2 gt b b3 gt b En laissant variables toutes les valeurs le syst me de contrainte quivalent exprime l galit entre la valeur de b et celle du ou des l ments de la liste Au plus un de vrai On complique quelque peu le probl me On veut imposer cette fois ci qu il y ait au plus une variable de vraie dans une liste L criture de ce pr dicat n est pas vraiment triviale au sens ou il n y a pas de correspondance imm diate entre la valeur de au plus un de vrai sur une liste de t te b1 et de queue L et sur celle de la liste L
4. assert hors de x Y Ql hors de x Q x Y XHY list hors_de X hors de x Y Ql hors de X Q X Y Q Une seconde m thode consiste passer toute la r gle en argument puisque le tout est un terme Dans ce cas assert traduit si possible les termes plac s entre accolades en v ritables contraintes Ces contraintes l ne sont pas conserv es apr s l appel assert hors_de X Y Ql hors_de X Q X Y list hors de x Y Q hors de X Q X Y Q Dans le cas o la r gle en argument contient des buts s par s par une ou plusieurs virgules il faut parenth ser celle ci pour lever l ambigu t entre les deux types de virgules virgule d arguments et virgule de queue de r gle assert a b c 8 PrologIA 379 Bolig R gles pr d finies Edimbourg asserta T Fonction Ajout d une r gle en d but de son paquet Classe Primitive Edimbourg Cat gorie Gestion des r gles et des identificateurs Param tres connus zL Messages d erreur Si T est une r gle incorrecte Description Ajout d une r gle au d but de son paquet T doit tre un terme ayant l une des formes d crites en introduction La t te de la r gle doit tre un arbre tiquet par un identificateur connu L effacement de assert T ajoute la r gle ou le fait T au dessus du groupe de r gles ayant le m me nom que la t te de T Par exemple
5. output x Avec x variable libre affiche un menu de dialogue de saisie de nom de fichier et unifie x avec le nom avec chemin du fichier saisi apr s l avoir ouvert en criture Il y a chec si le bouton Annuler est cliqu voir aussi la primitive sfputfile gr_load s Dessine dans la fen tre graphique courante le contenu d un fichier graphique de nom s et de type MacPaint ou MacDraw PNTG MacPaint ou PICT MacDraw sauv en format PICT Il est possible de dessiner des endroits diff rents des parties s lectionn es d un fichier en jouant sur les primitives gr_setorigin et gr_rect clipRect sfgetfile s Affiche une zone de dialogue permettant de s lectionner un fichier de type texte sur le disque et unifie s avec le nom avec chemin de ce fichier le fichier n est pas ouvert La r gle choue si le bouton Annuler est press Cette r gle est une forme simplifi e de la primitive suivante sfgetfile point L_types filtre s Affiche une zone de dialogue permettant de visualiser parmi les fichiers se trouvant sur le s disque s ceux dont le type est dans L_types et de s lectionner un fichier parmi ceux ci sans que le fichier ne soit ouvert point est un point de format lt x y gt indiquant l endroit o est affich le dialogue L_types est une liste de types pr cisant les fichiers proposer Un type est une cha ne de 4 caract res tel que d fini dans Inside Macintosh Exempl
6. 04 P4 O P5 0 XL 0 X2 1 X3 0 YL it VD EL P2 0 P3 O P4 0 P5 0 XL 01 X2 1 XI dir JLrerid VD 0 P2 O P3 01 P4 0 P5 O XL TU X2 0 X3 0 YL t V2 LUS P2 v 2 0 P3 0 P4 O P5 O XL ts X2 0 X3 0 Xhesi VD AN P2 O P3 01 P4 O P5 0 XL lt 11 X2 01 Xa S eey YL 0 VD 10 P2 O P3 0 P4 O P5 O XL lt X2 Qt X3 ri Hilo et ND TO P2 O P3 0 P4 0 P5 O Xl 1 X2 11 X3 10 VE lt Ley y2 00 P2 n0 P3 0 P4 O P5 O Xl te X2 Lt XX Lry Ve Qi Y2 e LS P2 O P3 04 P4 0 P5 0 XL 1 X2 1 X3 211 VAL Lt Voir L P2 0 P3 0 P4 0 P5 0 On obtient ainsi toutes les solutions pour lesquelles il est possible que la porte 1 soit d fectueuse On peut cependant remarquer des solutions o le r sultat est correct par exemple la premi re ainsi que d autres pour lesquelles la d faillance de la porte 1 n est pas la seule panne possible on retrouve notamment la dixi me solution un des exemples pr c dents pour lequel l une des portes 1 ou 3 tait en panne On va donc tenter de raffiner encore le traitement pour n obtenir plus que les jeux de tests n cessaires et suffisants pour isoler la panne Il nous faut exhiber pour cela les solutions qui sont tel
7. Voici une ex cution de ce programme gt feuilles Erable acer feuilles lobes 7 caduques 1 L L acer lt 7 1 gt Quick sort Voici un programme de tri r cursif le quick sort qui utilise les contraintes sur les tuples Rappelons bri vement l algorithme utilis Pour trier un tuple compos de nombres on choisit un l ment on partitionne le tuple en deux le premier tuple contenant les l ments inf rieurs ou gaux l l ment consid r le second les l ments strictement sup rieurs On applique alors r cursivement l algorithme sur les deux tuples ainsi form s jusqu arriver au tuple vide ProloglA 87 Arbres tuples cha nes et listes Pol Le choix de l l ment privil gi peut s effectuer de diverses mani res Nous avons choisi ici afin de mettre en vidence l acc s direct de choisir l l ment situ au milieu du tuple trier lt gt lt gt gt trier L U lt X gt V gt partitionner L X U V trier U U trier V V partitionner L X U V gt trunc N 2 N regrouper X L U V L CN U oN L U lt X gt V L U V regrouper X lt gt lt gt lt gt gt regrouper X lt X gt L lt X gt U V gt regrouper X L U V X lt X regrouper X lt X gt L U lt X gt V gt regrouper X L U V xX gt X On peut proposer un certain nombre d ex cutions de ce programme la
8. au moyen de la r gle assign voir le paragraphe suivant alors la valeur de i est k siin a pas fait l objet d une affectation pr alable alors la valeur de i est lui m me ProloglA 169 L environnement Exemple gt assign un l gt val un x val deux y x 1 y deux gt Les fonctions valuables sont add f1 t2 valeur add t1 t2 valeur ti valeur t2 Les valeurs de t et t2 doivent tre num riques et connues sub f1 t2 valeur sub t1 t2 valeur t1 valeur to Les valeurs de t et t2 doivent tre num riques et connues mul f1 t2 valeur mul t t2 valeur t1 x valeur t Les valeurs de t et t2 doivent tre num riques et connues div f1 t2 valeur t valeur dio ti t2 Toaleur t2 Il s agit du quotient entier par d faut de la valeur absolue de t1 par la valeur absolue de t2 Les valeurs de t4 et t2 doivent tre des nombres entiers mod t t2 valeur mod t1 t2 valeur t1 modulo valeur t Il s agit du reste de la division enti re de la valeur absolue de t par la valeur absolue de t2 Les valeurs de t4 et t2 doivent tre des nombres entiers 170 ProloglA Bolig Bolig L environnement eql t1 t2 valeur eql t1 t2 1 si valeur t1 valeur t2 0 sinon Les valeurs de t1 et t2 doivent tre des constantes de m me type inf t1 t2 valeur inf t1 t2 1 si valeur t1 lt va
9. 460 ProloglA Bolig Syntaxes prologIII gt list titi titi Var Var gt Ne gt titi 11 X X 11 gt Var a l air ici d un identificateur mais c est une variable Ceci n est pas g nant tant qu on ne demande pas d criture de terme par solution ou par les pr dicats pr d finies trace out write Dans ces cas les termes crits peuvent sembler confus Indiquons que dans cette version assert utilise l criture Prolog IA 461 LISE PITA T HERITAGE Bolig Primitives Graphiques Introduction et conventions Primitives de gestion des fen tres Dessin et positionnement Usage de la souris Modes de dessin et d criture Primitives sp ciales de lecture et d criture Primitive de description de menus Gestion des bo tes de dialogue Boutons actifs Primitives de manipulation de fichiers O O O e De m S Que trouve t on dans ce chapitre Le syst me Prolog II comporte un dispositif asynchrone de gestion des v nements permettant le fonctionnement de l environnement fen trage menus sans que l utilisateur ait r organiser son programme sous la forme de boucle de gestion des v nements La plupart des v nements tels que le redimensionnement d une fen tre le d filement des fen tres de texte sont g r s automatiquement L utilisateur peut associer des proc dures Prolog certains v nements comm
10. Cette primitive recherche toutes les r gles qui satisfont aux contraintes t t te de la r gle q queue de la r gle et les supprime t doit tre assez connu pour qu il n existe aucune ambigu t quant au nom des r gles vis es suppress i suppress i a suppress i a n Suppression de r gles i doit tre un identificateur a et n des entiers ces primitives produisent la suppression de premi re forme toutes les r gles ayant l identificateur d acc s nom i deuxi me forme toutes les r gles de nom i et d arit a troisi me forme la n me r gle parmi celles qui ont le nom i et l arit a ProloglA 189 L environnement Exemple gt insert data 1 gt data 2 gt data 3 gt gt data x 1 2 3 suppress data 1 2 a i LS data x 1 3 i i n a A A ARN RAR A Manipulation de modules objets kill_module s Supprime toutes les r gles du module d sign par la cha ne de caract res s Les tableaux du module sont d sallou s et les assignations des identificateurs du module sont d faites reload f 1 Chargement de modules sauv s fest un nom de fichier cha ne de caract res et l est une liste de substitution de pr fixes Cette commande produit le chargement des modules sauvegard s dans le fichier indiqu celui ci doit avoir t produit par la commande save En cas de red finition d un
11. gt enable 11 13 gt set_item 11 zonel set_item 12 zone2 disable 11 13 gt set_item 11 zonel set_item 12 zone2 set_item i b gt block_exit 816 set_item i _ 1 i b set_item e 1 i b set _item l i b 1 PrologIA set item i b 11 e 1 gt absent 507 PE ralo Primitives graphiques a gt gr_dialog group zone1 0 Hello crow rb1 lt color red gt Red crow rb1 lt color green gt 1 Green editf 5 ed1 aa button2 Disable disable l group zone2 1 button2 Enable enable buttonD CH EE 0 gt pead gt Gragn L color green ed1 aa 508 ProloglA Bolig Primitives graphiques Extensions utilisateur Un user_item est un objet l mentaire apparaissant dans une boite de dialogue L utilisateur a la possibilit de d finir ses propres items Il faut pour d finir un user_item lui donner un nom Termeldentifiant une sensibilit 0 1 ou 2 la valeur initiale de son tat et lui associer un paquet des r gles d arit 2 Ces 2 arguments seront respectivement la requ te et la valeur de retour Ce paquet lt IdentificateurdeR gle 2 gt sert pr ciser e la taille du rectangle englobant requ te size e le dessin correspondant l objet requ te draw e l action associ e un clic requ te click e la r ponse la f
12. Pour prouver que cette suite est p riodique de p riode 9 toute la subtilit consiste poser une requ te qui peut s noncer de la mani re suivante Quels sont les tuples de 11 l ments d crits par ce programme qui sont tels que l un ou l autre des deux premiers l ments soient diff rents de l un ou l autre des deux derniers l ments Voici cette requ te gt Suite U V W U 2 V 7 W 2 U W gt La requ te choue ce qui signifie que l ensemble des solutions est vide et prouve donc bien la propri t El gant non Crible d Eratosth ne Ce programme qui calcule les nombres premiers inf rieurs un entier vn peut s crire de mani re plus efficace sans utiliser l arithm tique sur la taille des tuples Il constitue cependant un excellent exemple de maniement des tuples et de la concat nation Voici le programme 90 ProloglA Bulag Arbres tuples cha nes et listes nombres premiers lt 1 gt Z gt cribles 2 X ZY Z N Louer N X lt 1l gt lt 1 gt X cribles N lt gt lt gt gt cribles N lt 0 gt X lt 0 gt Z gt cribles N 1 X Z cribles N lt 1 gt X lt 1 gt Z gt crible N X Y cribles N 1 Y Z crible N X X gt X M N gt M crible N X Y gt Crible N X Y X M N lt M X U lt E gt X Y U lt 0 gt Y U N 1 Pour construire le tuple
13. bound aurore A B C D bound boreale L L 12 L 12 L tuple bound E L L 12 Voir galement e known bound_tree bound_tree e free free_label PrologIA 215 2 gens 2 Boli R gles pr d finies et proc dures externes L bound_conc U1 U2 U3 Fonction concat nation Classe R gle pr d finie Prolog II Cat gorie Arbres listes cha nes et tuples Param tres connus Voir ci apr s Messages d erreur Non Description Pose la contrainte U3 U1 U2 Echoue si la taille du tuple U1 n est pas connue Exemples gt bound_conc lt 1 2 gt X Y Z Z lt 1 2 gt X Y X 3 gt bound_conc X Y Z gt Voir galement e conc3 216 ProloglA Bolig R gles pr d finies et proc dures externes bound _mult N1 N2 N3 Fonction Multiplication lin aire Classe R gle pr d finie Prolog II Cat gorie Contraintes num riques Param tres connus Voir ci apr s Messages d erreur Non Description Pose la contrainte N3 N1 N2 Echoue si N1 et N2 ne sont pas des valeurs num riques connues en d autres termes r ussit si l une des deux est connue ce qui rend la contrainte lin aire Exemples gt bound mult 2 Y 2Z 2Y gt bound mult X X 4 gt Voir galement o mult PrologIA 217 2 gens 2 Boli R gles pr d finies et proc dures externes L bound si
14. consult S Fonction Insertion de r gles Classe Primitive Edimbourg Cat gorie Entr es Sorties Param tres connus S qui doit tre une cha ne ou un identificateur Messages d erreur Fin de fichier inattendue Impossible d ouvrir le fichier Description Cette r gle pr d finie permet d ajouter des nonc s r gles dans l ordre dans lequel ils sont lus partir du fichier S Lorsque S est un identificateur c est la cha ne correspondant son abr viation qui est prise en compte comme nom de fichier on ignore donc le pr fixe Lorsque cette cha ne est user le fichier de lecture est la console La lecture se termine lorsque l on rencontre la fin du fichier ou bien quand une r gle vide est lue une r gle vide tant constitu e d un suivit d un espace Si une erreur de syntaxe est rencontr e un avertissement est affich et un certain nombre de caract res en principe tous les caract res jusqu un sont ignor s puis l insertion reprend consult provoque une erreur lorsque un paquet lu existe d j Dans ce cas Prolog III sort du mode insertion mais ne ferme pas les fichiers qui taient ouverts il continue donc lire le s fichier s en cours les faits et les requ tes sont ex cut es les r gles provoquent des erreurs de syntaxe L appel consult S est quivalent insert S lorsque S est une cha ne de caract res consult user est lui quivalen
15. 4 Manipulation d arbres leaves p3e Le programme Construit la liste des feuilles d un arbre leavesOf A X leavesOfTree A X lt gt leavesOfTree El lt gt lt E gt X X leavesOfTree E U X X leavesOfList U X X U lt gt leavesOfList lt gt X X leavesOfList lt A gt U X X leavesOfTree A X X leavesOfList U X X Questions leavesOf measures Max lt 1 75 100 metres gt 1 X leavesOf weighs Max lt 2 P 1 kg gt male 1 O3 HU X PrologiA 539 Annexes es 5 Un peu de logique god p3e Le programme valueOfSomethingHasAlwaysExisted B PAGS du A gt B C amp B amp C A gt D E amp D amp E B C LA question valueOfSomethingHasAlwaysExisted B 540 ProloglA Bola s Annexes 6 Un probl me de Lewis Caroll lewis p3e Le programme Peut on tre d put possibilite X casPossible Y sousEnsemble X Y sousEnsemble lt gt Y sousEnsemble lt E gt X Y elementDe E Y sousEnsemble X Y elementDe E lt E gt Y elementDe E lt F gt Y elementDe E Y E F casPossible lt lt A avoir l esprit clair gt lt B avoir recu une bonne education gt lt C discourir sans cesse gt lt D employer son influence a des fins meritoires gt lt E etre affiche dans les v
16. Expressions bool ennes e Soit V le sous ensemble des variables qui repr sentent des valeurs boo l ennes e Soit B 0 1 l ensemble des valeurs que peuvent prendre les l ments de V Ce sont les repr sentations en Prolog II des constantes faux et vrai e Soient enfin les op rateurs suivants non amp et ou gt implique lt gt quivalent Les expressions bool ennes sont d finies comme suit e _0 et 1 sont des expressions bool ennes e les variables bool ennes sont des expressions bool ennes e sifetg sont des expressions bool ennes alors f P 1 8 f amp 9 f gt 8 f lt gt 8 sont des expressions bool ennes Il est clair d apr s ce qui pr c de que toute expression bool enne est un terme Prolog III Priorit s des op rateurs bool ens Afin de permettre la suppression d un certain nombre de parenth ses on introduit un ordre de priorit sur les op rateurs bool ens e L op rateur est prioritaire sur amp gt et lt gt e Les op rateurs amp sont prioritaires sur gt et lt gt Exemples ProloglA 119 Les contraintes bool ennes Pelig e a b lt gt c amp 4 s crit plus simplement a b lt gt c amp d e al bic 4 s crit plus simplement a b c a Voici d autres exemples d expressions bool ennes correctes e 1 eb si b est une variable typ e bool enne e
17. L tat d un groupe ne peut tre modifi dans la version actuelle que par les actions associ es aux boutons L tat d un groupe n est pas donn dans la liste de sortie il est par contre fourni dans la liste des tats pass e aux boutons sous la forme d une paire l identificateur valeur PrologilA 503 ralo Primitives graphiques a Exemples gt gr_dialog lt 50 50 gt ccol Voulez vous recommencer le test buttonD button Annuler fail Uoulez uous recommencer le test gt gr dialog Choose the color you want crow l rb lt rbl red gt 1 Red rb lt rbl green gt Green crow cb cb1l 0 Extended colors ccol buttonD Show Color button Cancel fail l 1 cb1 1 cb1 Cl lt rbl red gt R lt rbl green gt G 504 ProloglA A e e i Primitives graphiques Choose the color you want w Red 2 Green J Extended colors Shouw Colo ProloglA 505 Primitives graphiques gt gr dialog lt 50 50 gt crow I abcdefgh ccol button Stop fail buttonD OK button Cancel fail HELLO WORLD l ijklmnopq abcdefgh ijkimnopq Cance HELLO IWORLD gt gr_dialog glist 5 10 listel lt rouge vert bleu jaune violet noir blanc orangel l 4 6 2 gt buttonD 1 L 506 ProloglA Bolig Bulag Primitives graphiques list1 jaune noir
18. Pour d signer des arbres qui ne sont pas des constantes vous devez crire des formules qui combinent des constantes et des op rateurs selon une syntaxe que nous indiquerons progressivement Une telle formule exprime le r sultat d une op ration Une op ration est d finie sur un ensemble de n uplets d arbres chacun elle associe un arbre f a an gt f a an L ensemble des n uplets d arbres pour lesquels une op ration donn e est d finie n est pas obligatoirement gal l ensemble de tous les n uplets on dit que l op ration est partielle Sp cifier le sous ensemble des n uplets sur lesquels l op ration est d finie fait partie de la d finition de l op ration en question On dispose de trois types d op rations les op rations bool ennes les op rations arithm tiques et les op rations de construction d arbres Avec une pr cision importante les op rations bool ennes et arithm tiques ont leur signification math matique habituelle Cette remarque peut surprendre mais elle m rite d tre faite notamment l intention des utilisateurs des Prolog pr c dents Dans ces langages des op rations not es amp etc sont d finies ou pourraient l tre cepen dant elles n y ont pas leur signification math matique courante elles ne sont que des op rations de construction d arbres Ainsi en Prolog II la formule 2 3 d signe l arbre dont l tiquette est et les fils 2 et 3 Un pr dicat
19. Pourtant cette puissance se paye En effet les algorithmes de r solution de contraintes bool ennes sont exponentiels On pourra donc rencontrer certaines difficult s temps d ex cutions trop longs voire inacceptables lorsque l ensemble d quations bool ennes traiter devient trop complexe Pour tenter de rem dier cet tat de fait en dehors des efforts accomplis pour am liorer les algorithmes dans les versions futures on pourra souvent faire chuter par une programmation adapt e parfois de mani re spectaculaire les temps d ex cution C est pourquoi nous fournirons dans ce chapitre des conseils de programmation destin s minimiser les temps de calcul On se propose ici apr s quelques brefs rappels relatifs aux contraintes bool ennes de d crire les sp cifications du langage pour ce qui concerne cette partie avant de pr senter un certain nombre d exemples de pro grammes destin s illustrer l utilisation de ce type de contraintes 2 Quelques d finitions et remarques Nous allons tout d abord rappeler ce que sont en Prolog III les expressions bool ennes puis revenir sur les notions d affectation et de solution d un ensemble de contraintes bool ennes Nous terminerons par la pr sentation des simplifications et plus pr cis ment de l quivalence sur un sous en semble de variables concept que nous rencontrerons fr quemment par la suite 118 ProloglA Bulag Pol Les contraintes bool ennes
20. Voici des exemples de variables syntaxiquement correctes xX W Zei P2c Nouvelle variable X__y U 2 A I can N B L usage du caract re est d conseill Prolog III l utilise pour nommer des variables qu il est amen cr er de mani re interne Identificateurs Un identificateur peut tre complet ou abr g Il est complet s il est pr fix lt pr fixe gt lt nom gt lt nom gt orbis lex lt nom gt lt lettre gt lt alphanum rique tendu gt lt identificateur gt lt pr fixe gt lt identificateur abr g sys outm lt identificateur abr g outm Prolog IA 443 Bol Syntaxes A lt identificateur abr g gt lt minuscule gt lt alphanum rique tendu gt On remarquera que la syntaxe des identificateurs abr g s est tr s proche de celle des variables La diff rence retenir est qu une variable d bute par une lettre majuscule alors qu un identificateur commence par une lettre minuscule La forme pr c dente est sp cifique de la syntaxe Edimbourg Dans les deux syntaxes un identificateur abr g peut aussi s crire entre simples guillemets lt identificateur abr g lt caract re constant sauf gt 11 Voici des exemples d identificateurs corrects P pommme pommme a x 1 xx 2 a zZ44a 45b c46 en voici d autres qui sont incorrects ce sont en fait des variables Titi I m happy B29
21. bound _tree T Fonction V rifie que T repr sente un arbre unique ventuellement infini Classe R gle pr d finie Prolog II Cat gorie Arbres listes cha nes et tuples Param tres connus Aucun Messages d erreur Non Description V rifie que T repr sente un arbre unique c est dire que le terme T ne comporte aucune variable T peut repr senter un arbre infini Si on est s r d tre dans le cas contraire utiliser la primitive bound_tree plus efficace Exemples gt bound tree lt 1 2 3 4 gt gt bound tree X X 1 X Voir galement e free free_label known bound bound_tree 220 ProloglA A gt 2 L2 bd L a R gles pr d finies et proc dures externes break break S1 break S1 S2 Fonction Appel au debugger Prolog II Classe Proc dure externe Prolog II Cat gorie Environnement Param tres connus S1 et S2 Messages d erreur non Description Cette primitive a pour effet de passer en mode debug et selon la pr sence d arguments d imprimer la cha ne S1 sur la sortie de trace puis d ex cuter sous le debugger Prolog II les commandes contenues dans cha ne S2 Placer des appels break dans un programme revient installer manuel lement des points espions des endroits beaucoup plus pr cis que ceux plac s au moyen de la primitive Prolog spy sur tout un paquet de r gles De plus la possibilit de passer des commandes au
22. choix4 c est couleur X taille Y tout gt couleur X taille Y tout gt couleur X taille Y tout gt couleur X taille Y LR NS tout gt PrologilA 230 i R gles pr d finies et proc dures externes gt choix1 U 230 ii J lt rouge grand gt lt rouge petit gt lt bleu grand gt lt bleu petit gt c est tout 1x2 U lt rouge grand gt lt rouge petit gt lt bleu grand gt lt bleu petit gt oix3 U lt rouge grand gt U lt rouge petit gt ix4 U J lt rouge grand gt oix1 U cut J lt rouge grand gt ProloglA Bolig A gt 2 L2 bd L a R gles pr d finies et proc dures externes debug Fonction Mode debug pour l ex cution d un programme Classe Proc dure externe Prolog IM II Cat gorie Environnement Param tres connus Aucun Messages d erreur Non Description Passage en mode debug pour le suivi de l ex cution d un programme L utilisateur se r f rera au manuel Mise au point de programmes Prolog II pour de plus amples informations Voir galement e no_debug trace no_trace e set_config set_configuration get_config get_configuration PrologIA 231 2 gens 2 Bol R gles pr d finies et proc dures externes L def_array I N Fonction D claration de tableau statique Classe Proc dure
23. gt a gt b b gt c c gt a alblce 1 a 1 b 1 c 1 gt 16 ProloglA Bulag Doli D buter avec Prolog II Cette fois ci la solution est unique et Prolog nous r pond que toutes les variables prennent la valeur vrai ststs ProloglA 17 LISE PITA T HERITAGE Bolig Concepts de base Arbres Constantes Op rations Variables Termes Relations Contraintes R solution des R gles et requ tes O O S O O a a Que trouve t on dans ce chapitre Quels sont les concepts fondamentaux de Prolog II Quels objets le langage manipule t il Quelle est la nature des contraintes qui p seront sur ces objets Qu est ce qu un programme Prolog II signifie pour le programmeur Comment la machine l ex cute t elle Selon quelle syntaxe ces objets et contraintes doivent ils tre exprim s Il y a une diff rence de nature et non de degr entre la plupart des autres langages de programmation et Prolog III On ne peut aborder ce dernier sans examiner auparavant un certain nombre de concepts originaux la base du langage indispen sables pour une utilisation optimale parfois m me une utilisation tout court de celui ci Ce chapitre pr sente l ensemble des sp cifications de Prolog II d une mani re assez informelle accessible quel que soit le degr de familiarit que vous entretenez d j avec la programmation logique Nous y d finissons les objets manipul s par le langage puis l
24. l ments est fausse On remarquera galement que l ex cution d une question dans laquelle x n est pas connu donne un ensemble de r ponses correspondant aux valeurs possibles de x Il existe galement une mani re de programmer cet exemple en utilisant un simple appel r cursif ce qui le rend nettement plus efficace Nous laissons au lecteur le soin d crire ce programme titre d exercice 4 D autres exemples Nous allons ici pr senter quelques exemples de tailles un peu plus volu mineuses qui permettent d appr cier l utilisation des contraintes bool ennes pour r soudre un certain nombre de probl mes Pannes dans un additionneur binaire Il s agit de d tecter le ou les composants d fectueux dans un additionneur qui calcule la somme binaire de trois bits x x x sous forme d un nombre binaire de deux bits y y Comme on peut le voir dans la figure suivante ce circuit est form de 5 composants num rot s de 1 5 deux portes et marqu es Et une porte ou marqu e Ou et deux portes ou ex clusif marqu es OuX Trois variables u1 u2 u3 ont t introduites de fa on repr senter les sorties des portes 1 2 et 4 ProloglA 135 Les contraintes bool ennes Pelay Fig 4 1 Le circuit On associe chaque porte i une panne p et l on se place dans une hypoth se de panne simple c est dire que l on admet que deux portes ne peuvent tre d fectueuses simultan ment Voici les pr dica
25. lt chiffre gt lt suite de chiffres gt Pour les r els la syntaxe est simple au moins un chiffre pour la mantisse le point y est obligatoire mais l exposant est facultatif Attention le r el lu est le plus long possible cela peut cr er des situations confuses 2 0 6 se lit 2 x 6 O 6 est une variable mais 2 0e6 se lit 2 000 000 Des exemples d entiers corrects 1234 1 234 567 815915283247897734345611269596115894272000000000 Des exemples d entiers incorrects _27 variable 12 34 suite de deux entiers 98 0 0 r els Quelques r els valides 1 e6 10 5e6 0 5 x 10 3 14e 6 Sd 10e 4 4 666 0 666 Et d autres qui n en sont pas e10 c est la variable ou l identificateur e10 e10 la mantisse doit avoir au moins un chiffre 1 2e valeur de l exposant absent 3e10 absence du point de la mantisse 3xe10 Prolog IA 429 A Syntaxes nr Nous allons maintenant introduire le caract re d chappement Celui ci nous permettra l int rieur d une cha ne ou d une constante de type caract re de repr senter certains caract res parfois indisponibles au clavier ou bien d y masquer certains caract res inopportuns comme le retour chariot que l on doit taper pour que le tampon du clavier ne d borde pas lorsqu on frappe une ligne trop longue Nous introduisons ici la d finition d un caract re d sign qui est tr s proche de ce qui ce passe dans le langage C
26. premi re consiste effectuer un tri sur un tuple enti rement connu gt trier lt 6 5 4 3 2 1 gt L gt L lt 1 2 3 4 5 6 gt On peut galement chercher les tuples qui une fois tri s donnent un tuple connu Par exemple 88 ProloglA ou Arbres tuples cha nes et listes gt trier L lt 1 2 3 gt L 3 L lt 1 2 3 gt EN CET CERTES Il A N CU H V NT NT a a Cette ex cution fournit bien s r toutes les permutations de n l ments Enfin on peut trier un tuple dont les l ments sont inconnus mais sur lesquels on connait d j un ordre gt trier lt X Y Z gt L Z gt Y gt X Y X X1 Z X X2 X1 L lt X X X1 X X2 X1 gt Xi gt 0 X2 gt 0 Les variables d cart introduites ont t renomm es x1 et x2 Une suite p riodique Le but de ce programme est de montrer que la suite d finie par Xi 2 l Xi 1l Xi est p riodique de p riode 9 Voici le programme Suite lt Y X gt gt Suite lt Y X Y X gt U gt Suite lt Y X gt U Valeur absolue Y Y ProloglA 89 Arbres tuples cha nes et listes Valeur absolue Y Y gt Y gt 0 Valeur absolue Y Y gt Y lt O Ce programme se contente de d crire la construction d un tuple dont les l ments constituent une suite d l ments de la suite d finie pr c demment
27. que la contrainte B bool appartient au syst me courant de contraintes 3 Premiers exemples de programmes Nous allons pr sent examiner quelques programmes Prolog IIT qui utili sent des contraintes bool ennes Un ou sur deux variables Un premier pr dicat tout fait l mentaire calcule le ou de deux variables Le voici OuSimple b1 b2 b1 b2 gt Quelques ex cutions nous donnent une id e plus pr cise du traitement effectu lorsqu on pose ce type de contraintes gt OuSimple 1 0 b b 11 Le r sultat de ou appliqu vrai et faux est vrai gt OuSimple b1 0 b b s pI b1 gt b Le r sultat de ou appliqu faux et une variable a la valeur de cette variable l galit est repr sent e ici par une double implication ProloglA 129 Les contraintes bool ennes Pelay gt OuSimple b1 b2 0 Enfin pour que le r sultat d un ou appliqu deux variables soit faux il faut que les deux variables repr sentent la valeur faux Un ou sur une liste Le calcul d un ou sur une liste de bool ens est un tout petit peu plus compliqu En fait on veut exprimer les contraintes quivalentes l expres sion il y a au moins un l ment vrai dans la liste le second argument du pr dicat Ou ayant la valeur de cette expression Voici le programme Ou lt gt 0 gt Ou lt b1 gt L bl1 b2 gt Ou L b2
28. Affiche l occupation de certaines zones Prolog Classe Proc dure externe Prolog M II Cat gorie Environnement Param tres connus Aucun Messages d erreur Non Description Affiche l tat courant des piles Exemple gt state copy stack 977 799900 lwords back stack 0 200000 lwords rule space 48235 100000 lwords dictionary acces 20556 36864 bytes dictionary names 4053 12144 32784 bytes ProloglA 349 Bulag R gles pr d finies et proc dures externes string S Fonction V rifie que S est une cha ne connue Classe Proc dure externe Prolog M I Cat gorie V rifications de type Param tres connus Voir ci apr s Messages d erreur Non Description e S ex cute avec succ s si S repr sente une chaine enti rement connue Echoue dans tous les autres cas Exemples string a l abordage string lt C I A gt string debut lt A B C gt string XX string not a string 350 ProloglA Bolig R gles pr d finies et proc dures externes string_bool S B Fonction Conversion d une cha ne en un bool en Classe R gle pr d finie Prolog III Cat gorie Conversions Param tres connus Voir ci apr s Messages d erreur Non Description e Si S est connu pose l ensemble de contraintes B S o S est un bool en form partir des caract res de la cha ne S e Si B est
29. Contr le Param tres connus P Messages d erreur Non Description Ex cute le but P La primitive Call est d finie par la r gle call X X PrologIA 383 Bulag R gles pr d finies Edimbourg clause T Q Fonction Obtient la t te et la queue d une r gle Classe Primitive Edimbourg Cat gorie Gestion des r gles et des identificateurs Param tres connus A Messages d erreur Non Description Unifie T et Q respectivement avec la t te et la queue de toutes les clauses dont l acc s est d fini par T Se comporte comme rule la structure de la queue pr s Celle ci est repr sent par l identificateur sys true lorsqu elle est vide par un terme lorsqu elle ne comporte qu un seul but par une structure peign e d tiquette sinon Remarques Il n est pas possible de r cup rer sous forme de termes l ensemble des contraintes de cette r gle En effet ces contraintes sont pos es d s l unification de la t te et portent donc sur les variables de T et de Q Exemples consult user differents A B AHB regle A B a A A B longue regle A B a A b B A 1 clause differents U V Queue Queue true U V clause regle U V Queue Queue a U U V clause longue_regle U V Queue Queue a U b V U 1 voir galement e rule 384 ProloglA Bolig R gles pr d finies Edimbourg
30. Exemple gt list lt aaa 2 gt lt aaa 3 gt lt bbb X gt list lt i a gt n Lister une r gle i doit tre un identificateur et a un entier la r gle num ro n du paquet correspondant au nom i et l arit nombre d arguments a est list e sur la sortie courante predefined t Cette primitive r ussit si est un terme correspondant l appel d une r gle pr d finie rule n a t q rule n t q Recherche des r gles correspondant un mod le donn Ces primitives num rent les r gles qui satisfont aux contraintes suivantes n rang de la r gle dans son paquet a identificateur d acc s nom de la r gle t t te de la r gle q queue de la r gle Dans la premi re forme a doit tre un identificateur connu dans la deuxi me forme t doit tre suffisamment connu pour pouvoir en d duire l identificateur d acc s des r gles vis es Exemple d utilisation se rapportant toujours au programme conc donn plus haut en exemple gt rule n conc t q 188 ProloglA WA hrs a L environnement n 1 t conc x_8 x_8 q n 2 t conc le 11 x 11 y 11 e 11 z_11 q conc x 11 y 11 z 11 gt rule n conc vl q n 1 v lt x 12 x 12 gt q n 2 v lt le 15 x 15 y 15 le 15 z 15 gt q conc x 15 y 15 z 15 retract f q Recherche et suppression des r gles correspondant un mod le donn
31. Exemples 1 Erreur dans val Voir galement e val egl PrologiA 415 Bulag R gles pr d finies Edimbourg X Y Fonction Non galit des valeurs de deux termes Classe Primitive Edimbourg Cat gorie Evaluation de fonctions pr d finies Param tres connus XetY Messages d erreur Erreur dans val Description Evalue les termes X et Y R ussi quand la valeur de X est diff rente de la valeur de Y choue sinon Cette r gle pr d finie est d crite comme ceci X Y val eql X Y 0 Exemples Erreur dans val Voir galement e val eql 416 ProloglA Bolig R gles pr d finies Edimbourg X gt Y Fonction Si Alors Classe Primitive Edimbourg Cat gorie Contr le Param tres connus X et Y qui doivent tre connus leur appel Messages d erreur Non Description Tente d effacer X une fois Si c est possible ex cute alors Y de toutes les fa ons possibles Voici cette r gle pr d finie X gt Y X Y PrologIA 417 Bolig R gles pr d finies Edimbourg X Y Fonction S quence d ex cution Classe Primitive Edimbourg Cat gorie Contr le Param tres connus X et Y qui doivent tre connus leur appel Messages d erreur Non Description Ex cute X Si c est un succ s ex cute alors Y C est le m canisme principal d une queue de r gle Voici cette r gle pr d
32. PROLOG IIT www prolog heritage org Version restaur e partir des archives de ProloglA gracieusement c d es l association PROLOG HERITAGE Manuel mis en consultation libre sur Internet au printemps 2010 PROLOG HERITAGE Contact association prolog heritage org Prolog III Version 1 3 ProloglA Garantie et responsabilit s ProloglA n offre aucune garantie expresse ou tacite concernant ce manuel ou le logiciel qui y est d crit ses qualit s ses performances ou sa capacit satisfaire quelque application que ce soit ProloglA ne pourra tre tenue responsable des pr judices directs ou indirects de quelque nature que ce soit r sultant d une imperfection dans le programme ou le manuel m me si elle a t avis e de la possibilit que de tels pr judices se produisent En particulier elle ne pourra encourir aucune responsabilit du fait des donn es m moris es ou exploit es y compris pour les co ts de r cup ration ou de reproduction de ces donn es L acheteur a toutefois droit la garantie l gale dans les cas et dans la mesure seulement o la garantie l gale est applicable nonobstant toute exclusion ou limitation Droits d auteur Ce manuel et le logiciel qu il d crit sont prot g s par les droits d auteur Au terme de la l gislation traitant de ces droits ce manuel et ce logiciel ne peuvent tre copi s ou adapt s en tout ou en partie sans le consentement crit de ProloglA
33. Parc Technologique de Luminy Case 919 13288 Marseille Cedex 09 FRANCE T l 33 91 26 86 36 Fax 33 91 41 96 37 e mail net prolia dcftlx das net e mail net prolia tlxf geomail org Telex Prolog 403 527 box PrologIA 1 Et seront retir es d s la version 1 4 ProloglA Bolig Bolig Table des mati res Manuel de r f rence Pr ambule sisi anne de entree i Diff rences entre la versionn 1 2 et la version 1 3 iii Introduction esoe eea er E AER EEA EE E E R i 1 D b t r avec Prolog MI icsse sses ireset sresti sures aeiee senses oere S 5 1 D marrer une session Prolog Is oiseau nice 6 2 Utilisation d un programme d exemple 8 Chargement du programme a rienne memes tune 8 Suppression dition sauvegarde ssisesesesrseserrereeereeeerssresssses 10 3 Quelques petits ex mples siisii isnie 12 LS t pl s iiis ss nie sine Eaa AAE SEAS A AEEA 12 Latithm tigquen taeniata a a ns ne da a nt 14 Ees bool ns sr nr en e E EE 16 Concepts de b se iseenese eere e n oe panerai iee o Sre oios 19 Te Arbres E a Ea a AE E AA A a a aR 20 2 Constantes ar opre p aes la nra aa A EERE ENE Ee TAN E ivan 23 Les id ntificat ursi ss inn nn a An ner T S 24 L s caract res ss a an eea EE E AERO NOE SiE EEO a EAA de 25 Les valeurs bool ennes sssss ssssss sisi 25 Les nombres entiers non n gatifs 26 Les nombres flottants non n gatifs 26 Ee t ple
34. ProloglA Bolig R gles pr d finies et proc dures externes mod t t2 valeur mod t1 t2 valeur t modulo valeur t2 Les valeurs de t4 et t2 doivent tre des nombres entiers trunc t1 valeur trunc t1 partie enti re de valeur t La valeur de t doit tre num rique eql t1 t2 valeur eql t1 t2 si valeur t1 valeur t2 alors 1 sinon 0 Les valeurs de t1 et t2 doivent tre des constantes de m me type inf t1 t2 valeur inf t1 t2 si valeur t1 lt valeur t2 alors 1 sinon 0 Les valeurs de t1 et t2 doivent tre des constantes de m me type Pour les entiers et les r els on prend la relation lt entre les nombres Pour les cha nes on prend l ordre lexicographique et pour les identificateurs on prend l ordre lexicographique sur les cha nes associ es infe t1 t2 valeur infe t1 t2 si valeur t1 lt valeur t2 alors 1 sinon 0 Les valeurs de t1 et t2 doivent tre des constantes de m me type Voir inf sup t1 t2 valeur sup t1 t2 si valeur t1 gt valeur t2 alors 1 sinon 0 Les valeurs de t1 et t2 doivent tre des constantes de m me type Voir inf supe t1 t2 valeur supe t t2 si valeur t1 valeur t2 alors 1 sinon 0 Les valeurs de t1 et t2 doivent tre des constantes de m me type Voir inf if t t1 t2 valeur if t t1 t2 si valeur t 0 alors valeur t1 sinon valeur t2 abs t valeur abs t valeur absolue de valeur t Pro
35. Tous ces l ments peuvent servir tiqueter un n ud un cas particu li rement fr quent tant celui o l tiquette est un identificateur comme dans l exemple dessin ci dessus Fort souvent de tels arbres repr sentent des relations Pour l arbre dont nous parlons ce pourrait tre s appelle Dupont est mari et p se 75 5 Kg Un autre cas fr quent est celui o l tiquette du n ud initial de l arbre n a aucune signification pour le programmeur qui ne s int resse donc qu la suite des fils Prolog II permet d utiliser alors pour tiquette le double signe conventionnel lt gt De tels arbres sont appel s PI tuples ou plus simple ment tuples et ils implantent donc la notion de suite finie d arbres Dans cet esprit l arbre r duit au symbole lt gt repr sente la suite vide Les tuples sont expliqu s plus en d tail au chapitre Arbres tuples cha nes et listes Gr ce au puissant op rateur dont ils sont munis qui traduit l op ration de concat nation des suites finies les tuples constituent un outil souple et puissant pour la d finition de nombreuses structures de donn es alliant la g n ralit des listes et l efficacit des vecteurs Ils peuvent donc avantageusement remplacer la notion habituelle de liste comme elle existe en Lisp ou dans d autres Prolog Cependant ces listes classiques d finies partir de la notion de paire point e peuvent tre aussi utilis es en Prolog III y compr
36. est un long fleuve tranquille gt Voir galement e in_char in_char in_ident in_integer inl in_real in_string in_term next_char next_char ProloglA 267 Ed L a La Ed ol R gles pr d finies et proc dures externes ee in_string S Fonction Lecture d une cha ne quelconque Classe Proc dure externe Prolog M I Cat gorie Entr es sorties Param tres connus Aucun Messages d erreur Fin de fichier inattendue Description Lecture d une cha ne de caract res sur l unit d entr e courante Si une fin de fichier est d tect e une erreur est signal e et tout se passe comme si on avait fait un close_input Exemples gt in string S ceci est une chaine S ceci est une chaine gt in string S ceci n est pas une chaine gt in _string S 126 45 S 126 45 gt in string S 123 456 S 123456 Voir galement e in_char in_char in_ident in_integer inl in_real in_sentence in_term next_char next_char 268 ProloglA A gt 2 L2 bd L a R gles pr d finies et proc dures externes in term T Fonction Lecture d un terme quelconque Classe Proc dure externe Prolog M II Cat gorie Entr es sorties Param tres connus Aucun Messages d erreur Erreur dans assert ou in_term Fin de fichier inattendue Description Lecture d un terme Prolog sur l entr e courante
37. gt X1 Y2 gt X3 X2 Xx1 Y2 amp X2 amp X1 gt X3 Y2 amp X3 amp X1 gt X2 X2 gt Y2 Y1 X2 gt Y2 X3 X1 X3 gt Y2 X2 X1 X3 amp X2 amp X1 gt Y2 X1 gt Y2 X3 X2 Si l on excepte le fait que les autres pannes sont fausses ce qui provient naturellement du pr dicat AuPlusUnvrai les renseignements fournis par le syst me simplifi sont plut t illisibles Une solution consiste num rer les solutions de ce syst me pour visualiser les diff rents jeux de donn es qui permettent de parvenir ce r sultat Pour ce faire on ajoute au programme les pr dicats suivant qui instancient les variables bool ennes de mani re non d terministe booleans lt gt gt booleans lt B gt L gt boolean B booleans L boolean 0 gt boolean 1 gt On lance alors la requ te en num rant les solutions 138 ProloglA Bolig Les contraintes bool ennes gt circuit lt 1 P2 P3 P4 P5 gt lt X1 X2 X3 gt lt Y1 Y2 gt booleans lt X1 X2 X3 Y1 Y2 gt XL 01 X2 QU X3 0 Yso V2r 0 P2 O P3 01 P4 0 P5 0 XL Qi X2 Q X3 01 VAL Lt V2 10 P2 O P3 0 P4 0 P5 O XL 0 X2 Qt XX ris YA Qi ND TI P2 0 P3 04 P4 O P5 O XL 0 X2 0 X3 dt VE Lt VD LUE P2 20 P3 0 P4 0 P5 0 XL SAN X2 1 X3 0 XLS Ohy Yere AN P2 O P3
38. le programme en cours est suspendu et le but Identificateur u est imm diatement activ Si le but se termine sans erreur le programme reprend normalement Il est possible d utiliser des formes simplifi es soit avec un tuple deux arguments lt Nom item Identificateur gt quivalent lt Nom item Identificateur 0 gt soit avec simplement un identificateur Identificateur quivalent lt Identificateur Identificateur 0 gt Exemple en supposant que l on ait la fen tre d dition menu p3 ouverte gt set menu O Controle Inserer la fenetre lt Inserer la fenetre insertion fen gt set menu menu p3 Inserer lt Inserer insertion fen gt insertion fen 0 gt front window u reinsert u insertion_fen u gt string u reinsert u Valeur de type hi rarchie Une hi rarchie est repr sent e par un tuple deux arguments de la forme lt Nom item Liste de valeurs gt ProloglA Primitives graphiques Bulag Chaque l ment de Liste de valeurs repr sente lui m me une valeur de type feuille ou une valeur de type hi rarchie Il est possible d utiliser une forme simplifi e Liste _de_valeurs Dans ce cas le nom de l item est celui indiqu la fin du chemin c Ceci revient apposer la hi rarchie sous l item indiqu Exemple gt set_menu graphic lt File rei
39. lt T gt V arg3 0 EILI T lt gt T lt gt L tuple arg3 5 lt X Y 5 gt T ERREUR 228 Argument de mauvais type arg3 5 exemple 1 2 3 T Voir galement earg arg2 PrologIA 205 2 gens 2 Bol R gles pr d finies et proc dures externes L assert T Q Fonction Ajout d une r gle au d but de son paquet Classe R gle pr d finie Prolog MI Cat gorie Gestion des r gles et des identificateurs Param tres connus TetQ Messages d erreur si Q n est pas une liste classique si T est une t te de r gle incorrecte Description Ajout d une r gle au d but de son paquet T doit tre un terme pouvant tre une t te de r gle c est dire repr sentant un arbre tiquet par un identificateur et Q doit tre une liste de termes L effacement de assert T Q ajoute la r gle T gt Q au dessus du groupe de r gles ayant le m me nom que T c est dire au d but du paquet correspondant T Par exemple les deux commandes suivantes Exemples gt assert conc lelx l y lelzl conc x y z l gt assert conc Il y y 1 tap es dans cet ordre ont pour effet l ajout du programme conc y y gt conc conc e x v elz gt conc x y z Il semble premi re vue que assert ne permet pas d ajouter des r gles comportant un syst me de contraintes Il n en est rien comme le montre l exemple suivant 206 Prolog
40. lt x gt L U1 lt 1 2 3 X gt L U2 lt 1 2 3 X gt I known part Ul U2 U3 U1 lt 1 2 3 gt lt X gt L L lt gt Ur lt 23 Xi U2 lt 1 2 3 X gt V1 PrologIA 285 Ed L ka Ed ANA R gles pr d finies et proc dures externes e Icm N1 N2 N3 Fonction Calcul du plus petit commun multiple Classe R gle pr d finie Prolog II Cat gorie Contraintes num riques Param tres connus N1 N2 Messages d erreur Non Description Pose la contrainte N3 N3 o N3 est le plus petit commun multiple des entiers N1 et N2 lem choue si N1 et N2 ne sont pas connus ou pas entiers Exemples gt lecm 12 18 P 36 gt lcem 12 18 P 36 Voir galement e ppcm e pgcd gcd 286 ProloglA Bolig R gles pr d finies et proc dures externes line Fonction Saut de ligne Classe R gle pr d finie Prolog MI Cat gorie Entr es sorties Param tres connus Aucun Messages d erreur Non Description Ecrit un retour chariot sur l unit de sortie courante Exemple Remarques Cette proc dure externe pourra peut tre se passer de remarques Voir galement e outl outml PrologIA 287 Ed L ka Ed ANA R gles pr d finies et proc dures externes n list Fonction Impression de r gles Classe R gle pr d finie Prolog MI Cat gorie Gestion des r gles et des identificat
41. subs1 gt lt prefk subsp gt qui sp cifie le renommage des modules charg s pref sera substitu par subs1 pref2 par subsp etc Exemple gt reload myfile mo lt data donnees gt Remarques Une tentative de chargement d un l ment r gle ou tableaux d j connu donne lieu au remplacement de l ancienne version par la nouvelle Les modules sauvegard s sont sous forme de code objet et non texte ProloglA 327 Ed L a La Ed ol R gles pr d finies et proc dures externes ee remove_implicit S1 S2 Fonction Modification de contexte Classe Proc dure externe Prolog M I Cat gorie Gestion des r gles et des identificateurs Param tres connus S1 S2 Messages d erreur Voir ci apr s Description Enl ve l identificateur ayant le nom abr g S2 de la partie ferm e de la famille correspondant au pr fixe 1 Voir la section Structuration saisie et modification des r gles du chapitre Le contr le et l environnement des programmes pour plus de d tails Voir galement e add_implicit dictionary e set_context current_context close_context_dictionary e module end module 328 ProloglA Bolig R gles pr d finies et proc dures externes repeat Fonction Boucles Classe R gle pr d finie Prolog MI Cat gorie Contr le Param tres connus Aucun Messages d erreur Non Description Il s agit simple
42. t avis e de la possibilit que de tels pr judices se produisent En particulier elle ne pourra encourir aucune responsabilit du fait des donn es m moris es ou exploit es y compris pour les co ts de r cup ration ou de reproduction de ces donn es L acheteur a toutefois droit la garantie l gale dans les cas et dans la mesure seulement o la garantie l gale est applicable nonobstant toute exclusion ou limitation Droits d auteur Ce manuel et le logiciel qu il d crit sont prot g s par les droits d auteur Au terme de la l gislation traitant de ces droits ce manuel et ce logiciel ne peuvent tre copi s ou adapt s en tout ou en partie sans le consentement crit de ProloglA sauf dans le cadre d une utilisation normale ou pour faire une copie de sauvegarde Ces exceptions n autorisent cependant pas la confection de copies l intention d un tiers que ce soit ou non pour les vendre Prolog III est une marque d pos e de ProloglA D cembre 1991 Pr ologlA Bolig Bolig D buggeur et mise au point de programmes Prolog Ill Introduction et conseils Trace d ex cution Aper u du mod le des boites Des exemples R gles pr d finies de mise au point Mise au point avanc e D tection d appels non d finis a E a Re Que trouve t on dans ce chapitre Le propre de tout programme est de pouvoir tre faux Aucun langage de programmation ne permet en effet de rentrer en machine l algorithme
43. tre repris 2 C est souvent la pr c dente de celle qui est affich e 2032 ProloglA Doley Bolig Outils de mise au point 3 2 EXIT r1 Plat boeuf 5 DBG chpt CHOICE POINTS new 413 r2 Viande porc 7 3 2 r2 Plat p i 212 r2 HorsDoeuvre pate 6 CHOICE POINTS old La boite n 2 HorsDoeuvre poss de un point de choix il faut donc retourner jusque dans cette boite par une suite de commandes FAIL et fail a 3 ok r1 Viande boeuf 5 DBG F 4 3 FAIL r1 Viande p j_1 DBG 2 RULE r2 Plat p j 1 Plat p 3 i_3 DBG 2 FAIL r2 Plat p j 1 DBG 2 REDO r1 HorsDoeuvre h i 1 DBG s 2 RULE r1 HorsDoeuvre h i 1 HorsDoeuvre radis 1 DBG N N N U WU 2 ok r1 HorsDoeuvre radis 1 DBG 2 R cup rer une erreur Il n est pas toujours facile de d terminer l origine d une erreur d ex cution quand bien m me cette erreur a t r cup r e par un m canisme de blocs La d tection d erreur se fait ais ment puisque le positionnement de la seule option catcherror permet de mettre un point d arr t sur l endroit ou cette erreur est g n r e gt minimize X 1 1 CALL minimize X DBG c 1 1 error 59 goes up to box 0 0 1 1 EXIT r1 minimize X 1 DBG c Err 60 Expression non bornee lors d un calcul d extremum gt PrologIA 2033 Outils de mise au p
44. 1 2 1789 8159152832478977343456112695961158942720000000001 On rappelle que ni les entiers n gatifs ni les nombres fraction naires ne sont consid r s comme des constantes On notera que l on peut les exprimer comme r sultats d op rations sur des entiers non n gatifs Les nombres flottants positifs ou nuls Exemples 12 345 0 5 1 2E12 0 888e87 La syntaxe exacte pour les flottants est donn e au chapitre r serv la syntaxe Les op rateurs num riques il s agit des op rateurs suivants plus unaire moins unaire addition soustraction 1 Le lecteur attentif aura reconnu l le r sultat de 40 ProloglA 97 Bolig Les contraintes num riques division multiplication Syntaxiquement Prolog III conservant en cela une certaine philosophie de la notation math matique autorise d omettre le signe de la multiplication lorsque cela ne g n re aucune ambigu t Par exemple le syst me de contraintes x 2Y 1 3Z 2T lt 5 est parfaitement correct Par contre la contrainte x Y x Y 0 est elle aussi correcte mais signifie que l arbre dont l tiquette est la valeur x y et dont l unique fils est la valeur num rique x y est diff rent de l arbre r duit la feuille o ce qui d ailleurs est toujours v rifi Priorit s des op rateurs num riques Afin de permettre la suppression d un certain nombre de parenth ses on introduit un ordre de pr
45. 208 asserta 186 207 380 assertz 187 208 378 assign 173 174 209 atan 172 370 atom 381 atomic 382 B bitmap de rafra chissement 468 block 166 212 block_exit 166 212 bo te cocher 500 bool 129 214 bool ens 16 118 syntaxe 428 bouclage 162 bound 149 167 215 bound_conc 80 216 bound_mult 105 156 217 bound_size 80 151 218 bound_tree 219 bound_tree 220 bouton 485 501 ProloglA 547 Index Pely bouton de terminaison 502 buts 60 syntaxe 440 C call 383 caract res 25 caract re d chappement 430 caract re d sign 430 espace 428 remarques 441 syntaxe 431 cha nes de caract res 13 27 71 85 syntaxe 431 changement de signe 30 char 221 char_code 222 chargement d un programme input 8 check_item 496 clause 384 clear _menubar 497 clear_window 472 clic 480 486 490 491 504 510 close_context_dictionary 183 223 close_input 9 195 224 close_output 11 197 225 cochage d un item 496 command_menu 496 commentaire 442 459 comparaisons num riques 52 conc3 80 154 226 conc_string 85 227 concat nation 12 76 retard e 154 connu terme 148 console 6 464 constantes 23 bool ennes 119 num riques 97 syntaxe 428 constructeur d arbres 72 de tuples 72 g n ral d arbres 72 548 consult 385 contexte courant 179 contexte de lecture criture 24 179 contraintes 54 438 bool ennes 16 120 exemples 122 forme normale 123 simplification 127 contrainte de taille
46. Bolig Outils de mise au point gt dizaine 10 gt gt dizaine 20 gt gt dizaine 30 gt gt dizaine x eee new query 11 1 CALL dizaine x DBG s 1 1 JEXIT r1 dizaine 10 DBG O OJEXIT r1 query DBG chpt CHOICE POINTS new 111 r2 dizaine 20 __ CHOICE POINTS old DBG changechpt 1 3 DBG chpt CHOICE POINTS new 111 r3 dizaine 30 __ CHOICE POINTS old DBG s x 10 et la prochaine solution sera 30 O OJREDO r1 query DBG 1 1 REDO r1 dizaine x DBG 1 1 EXIT r3 dizaine 30 DBG O OJEXIT r1 query DBG x 30 gt Dans celui l on repasse deux fois par la m me solution ProloglA 2019 Outils de mise au point gt dizaine x 1 1 CALL dizaine x DBG s 1 1 EXIT r1 dizaine 10 DBG O OJEXIT r1 query DBG chpt CHOICE POINTS new 111 r2 dizaine 20 __ CHOICE POINTS old DBG changechpt 1 1 DBG chpt CHOICE POINTS new 111 r1 dizaine 10 __ CHOICE POINTS old DBG s x 0o 0 REDO r1 query DBG 1 1 REDO r1 dizaine x DBG 1 1 EXIT r1 dizaine 10 DBG O OJEXIT r1 query DBG x 10 i 20 Se 30 gt 10 et la prochaine solution sera 10 REMARQUES e Le point de choix induit par le port RULE n est r ellement install et exploitable avec les commandes chpt et changechpt que lorsque l
47. Calcul du N i me l ment d une liste Compatibilit partielle Prolog II Arbres listes cha nes et tuples N qui doit tre un entier positif ou nul L qui doit tre une liste suffisamment connue N est inconnu n gatif ou plus grand que le nombre d l ments de T La liste L n est pas suffisamment connue Description Si N est nul arg2 pose la contrainte T S o S repr sente le nombre d l ments de la liste L Si N n est pas nul arg2 pose la contrainte T X o X est le N i me l ment de la liste L Exemples arg2 4 1 2 3 4 5 T T 4 arg2 2 A B C LI T T arg2 3 A L T ERREUR 228 Argument de mauvais type Voir galement e arg arg3 204 PrologIA Bolig R gles pr d finies et proc dures externes arg3 N T1 T2 Fonction Calcul du N i me argument d un tuple Classe R gle pr d finie Prolog III Cat gorie Arbres listes cha nes et tuples Param tres connus N qui doit tre un entier positif ou nul Messages d erreur N est inconnu n gatif ou plus grand que le nombre d arguments de T1 Description Cette primitive pose la contrainte T2 N o N est le N i me argument du tuple T1 Si N est nul T2 est gal l tiquette initiale de T1 c est dire lt gt Echoue si N n est pas un entier positif connu ou si T1 n est pas un tuple Exemples arg3 2 lt X Y 5 gt T T Y arg3 3 L T
48. Cat gorie Param tres connus Messages d erreur D finition de l unit d entr e courante Proc dure externe Prolog M II Entr es sorties F qui doit tre une cha ne de caract res Fin de fichier inattendue Impossible d ouvrir le fichier Description L unit dont le nom est F devient l unit d entr e courante Si cette unit ne figure pas parmi les unit s ouvertes alors le fichier correspondant est recherch et ouvert Sinon cette unit passe au sommet de la pile sauf si elle s y trouvait d j auquel cas le message Fichier d j ouvert est produit Un fichier de commandes ouvert par input peut lui m me contenir une commande input la nouvelle unit courante est alors empil e au dessus de la pr c dente Voir galement e input_is output output_is PrologIA 271 2 gens 2 Boli R gles pr d finies et proc dures externes L input_1is F Fonction Fournit l unit d entr e courante Classe Proc dure externe Prolog M I Cat gorie Entr es sorties Param tres connus Aucun Messages d erreur Fin de fichier inattendue Impossible d ouvrir le fichier Description Pose la contrainte F s ou s est une cha ne de caract res d crivant l unit d entr e courante Exemples gt input is X X console Voir galement e input output output_1s 272 PrologilA Bolig R gles pr d finies et
49. I Cat gorie Gestion des r gles et des identificateurs Param tres connus IN Messages d erreur Oui voir le manuel d utilisation Description Cette primitive permet d associer un nombre et un identificateur Elle est utilis e principalement pour associer un nom logique et un nombre utilis dans le fichier userrule c pour d finir une proc dure externe On consultera le manuel d utilisation pour plus de d tails concernant la d finition de primitives par l utilisateur 346 ProloglA Bolig R gles pr d finies et proc dures externes size U N Fonction Classe Cat gorie Param tres connus Messages d erreur Taille d un tuple R gle pr d finie Prolog II Arbres listes cha nes et tuples Aucun Non Description Pose la contrainte U sont connus Voir galement e bound size N avec les retardements n cessaires si N ou U ne ProloglA 347 Ed L a La Ed ol R gles pr d finies et proc dures externes ee split U L Fonction D composition d un tuple Classe R gle pr d finie Prolog MI Cat gorie Conversion Param tres connus uU Messages d erreur Non Description D compose un tuple ou donc une cha ne en la liste de ses l ments c est dire pose la contrainte L U o U est la liste des l ments du tuple U Echoue si U n est pas connu l ex cution Exemples split abcde V
50. La premi re est li e au fait que l efficacit de la r solution est d autant plus grande que les transformations effectuer pour le codage sont moins im PrologiA 123 Les contraintes bool ennes portantes ces transformations s av rant fort co teuses La seconde concerne les sorties qui pour les contraintes bool ennes sont toutes imprim es sous cette forme La forme normale conjonctive ou forme clausale d une formule est une formule quivalente crite sous la forme de conjonctions de disjonctions de litt raux c est dire de la fa on suivante l ou l ou l et l ou l ou l y o les l et les l j sont des litt raux c est dire des formules du type v ou non v avec v appartenant l ensemble des variables V On aura tout int r t crire lorsque c est possible des contraintes proches de ce formalisme afin d viter des transformations de co t expo nentiel L exemple typique d une contrainte dont la transformation est p nalisante est une repr sentation d une formule en forme normale dis jonctive Un exemple en est a amp b amp c a amp b amp c a amp b dont la forme normale conjonctive est alatat t Ti a a b 1 albijanri 1t afb jbtr Tr alc la t 11 alcer b f 4 bla ja 1 bla b 1 blb a 11 blb b 1 blc fa 1 blc b 1 cla fa 1 cla b 1 c jatt 1 cib b 1 gjet jati De Ars
51. Prefixe inexistant Erreur de chargement 2 D bordement de l espace des regles Fonction non evaluable Erreur dans assign Erreur dans val Erreur dans string_ident Variable PrologEdit non definie Erreur dans end_module Acces deja defini PRO_BIND Acces non defini Configuration inconnue Memoire saturee 7 Plus assez d espace ProloglIlI abandonne Demarrage ProloglIlI impossible Fichier d erreur non trouv Le systeme de contraintes de la requete est insatisfaisable Le systeme de contraintes de la regle est insatisfaisable Caractere illegal Erreur dans insert ou assert ou in_term Erreur interne 1 Erreur interne 2 Non implemente 1 PrologiA Bolig Annexes 510 Erreur interne 3 1001 1016 1026 1101 1105 1111 1115 1130 1255 1262 1304 1362 1363 1364 1365 1366 1367 1372 1386 1387 1388 1389 1390 1391 1392 1393 1394 1395 1396 Programme abandonne Interruption utilisateur Reel trop grand Erreur d ouverture du fichier d entree Eof ou erreur sur l entree standard Erreur d ouverture du fichier de sortie Le fichier est deja ouvert pour une autre operation L unite d entree sortie existe deja Doublet attendu pour gr_polygon Les arguments du premier tuple doivent etre compris entre 0 et 1 Erreur systeme page et set_cursor desactives Warning fichier termcap non trouve Warning terminal inconnu pour t
52. R gles pr d finies Edimbourg tell F Fonction D finition de l unit de sortie courante Classe Primitive Edimbourg Cat gorie Entr es Sorties Param tres connus F qui doit tre une cha ne ou un identificateur Messages d erreur Non Description Se comporte comme output F si F est une cha ne Dans le cas o F est un identificateur c est la cha ne correspondant son abr viation qui est prise en compte comme nom d unit pass e la primitive output c est dire que le pr fixe est ignor Voir galement e output close_output told 404 ProloglA Bolig R gles pr d finies Edimbourg told Fonction Fermeture de l unit de sortie courante Classe Primitive Edimbourg Cat gorie Entr es Sorties Param tres connus Aucun Messages d erreur Impossible de fermer le fichier Description Se comporte comme close_output Voir galement e output close_output tell PrologIA 405 R gles pr d finies Edimbourg true Fonction R ussite Classe Primitive Edimbourg Cat gorie Contr le Param tres connus Aucun Messages d erreur Non Description S efface toujours avec succ s Voir galement o clause 406 ProloglA Bolig Bolig R gles pr d finies Edimbourg var T Fonction V rifie que T est une variable libre Classe Primitive Edimbourg Cat gorie Contr le Param tres co
53. Si l on observe le probl me de mani re un peu plus pr cise on se retrouve devant l alternative suivante Soit la t te de liste est vrai et le ou de la queue de liste doit tre faux soit la valeur de la t te de liste est faux et il faut qu il y ait au plus un l ment de vrai dans la queue de liste On peut alors proposer une premi re solution de la forme suivante ProloglA 131 Les contraintes bool ennes AuPlusUnVrai lt gt 1 gt AuPlusUnVrai lt b1 gt L b gt Ou L b2 AuPlusUnVrai L b3 b b1 amp b2 bi amp b3 Voici quelques ex cutions gt AuPlusUnVrai lt 1l b2 b3 gt 1 b2 0 b3 0 gt AuPlusUnVrai lt b1 0 b2 gt b b amp bl amp b2 0 b b1 Ti b b2 1 Pas de commentaires particuliers pour le premier exemple Dans le second le syst me de contraintes quivalent exprime les affirmations suivantes e b1 b2etb ne peuvent pas tre vrais en m me temps dans le cas contraire AuPlusUnVrai renverrai la valeur 1 avec deux l ments vrais dans la liste e b1 oub est vrai dans le cas contraire AuPlusUnvVrai renverrai la valeur o alors que deux des l ments de la liste sur les trois sont faux e b2 ou best vrai m me raison que pr c demment On peut galement crire ce programme sans renvoyer la valeur de l expression cela permettant de l optimiser On peut en effet consid rer le probl me de l
54. V2 iconManager draw N V2 R l gt gr dialog row userItem myIcon iconManager 1l l lt user Item buttonD L lt user Item myIcon 1 ProloglA 513 A Primitives graphiques P 9 Boutons actifs Les primitives d crites dans cette section permettent d associer des buts Prolog des boutons ces buts tant lanc s d s que le bouton est press de mani re similaire l activation d un but par menu c est dire en suspendant l ex cution en cours Prolog II se charge du rafra chissement du bouton X create_button s f p x1 y1 Cr ation d un bouton de nom s dans la fen tre de nom f s et f doivent tre des cha nes x1 y1 repr sentent les coordonn es du bouton par rapport au coin sup rieur gauche de la fen tre est l identificateur du but sans argument qui sera lanc lorsque le bouton est cliqu X activate button s Rend activable le bouton de nom s X deactivate button s Rend inactif le bouton de nom s Le texte est alors gris X kill button s Destruction du bouton de nom s 10 Primitives de manipulation de fichiers input x Avec x variable libre affiche un dialogue de s lection d un fichier de type texte seulement et unifie x avec le nom avec chemin du fichier choisi apr s l avoir ouvert en lecture Il y a chec si le bouton Annuler est cliqu voir aussi la primitive sfgetfile 514 ProloglA n Primitives graphiques
55. a 42 a1 lt gt 42 Les r sultats rendus par ces diff rentes op rations sont d finis par le tableau suivant ProloglA 29 Concepts de base a1 a2 A 41 amp 42 a1 42 41 gt 42 4A lt gt A 0 0 1 0 0 1 1 0 1 0 0 1 1 0 1 0 0 1 0 0 1 1 1 1 1 1 Des termes corrects exprimant des op rations bool ennes ainsi que certaines fautes ne pas commettre sont montr s au 5 Op rations arithm tiques Les op rations arithm tiques ne sont d finies que si les op randes sont des valeurs num riques c est dire des feuilles tiquet es par des nombres Si aucun de ces nombres n est flottant alors l op ration est consid r e comme une op ration exacte sur des nombres rationnels Si l un au moins des op randes est flottant alors l autre est transform en flottant sauf s il l tait d j et l op ration est consid r e comme tant l op ration correspondante sur les nombres flottants Les op rations arithm tiques sont 1 L op ration unaire neutre 41 gt 41 2 L op ration unaire de changement de signe al gt a 3 L op ration binaire addition a1 a2 41 a2 4 L op ration binaire soustraction a1 42 41 a2 5 L op ration binaire multiplication 30 ProloglA Bolig Concepts de base a1 a2 41 a2 Afin d all ger les critures la syntaxe de Prolog I permet d crire 4142 la place de 41
56. amp b gt 0 1 C est l une des restrictions de Prolog IIT que de ne pas permettre de m langer les diff rentes alg bres On se souviendra de mani re g n rale qu une contrainte bool enne n est valide que si elle contient exactement un symbole relationnel Bien qu il n y ait pas au sens strict de notion de type dans Prolog II on remarquera galement que l on peut contraindre une variable b tre bool enne c est dire repr senter un arbre tiquet par un bool en et r duit une feuille sans aucune autre restriction de quatre fa ons e en posant la contrainte b bool e en posant les deux contraintes b boolt et b 0 cette derni re ajoute la contrainte que b est une feuille e en faisant appara tre cette variable dans une expression bool enne Celle ci pourra figurer dans une contrainte comme dans b b 1 ou dans un terme par exemple bool en b 0 2 e en faisant figurer cette variable comme expression dans une contrainte de type gt Ceci impose en effet que les deux termes en relation soient des expressions bool ennes Une criture possible est o gt b5 o la seule contrainte impos e la variable b est de repr senter une valeur bool enne 1 On notera au passage que l expression b b a toujours pour valeur 1 L expression b 10 tout comme b amp 1 a toujours la m me valeur que b 3 La contrainte 0 gt b est galement toujours v rifi e pour toute valeur de
57. asserta 186 207 380 assertz 187 208 378 assign 173 174 209 atan 172 370 atom 381 atomic 382 B bitmap de rafra chissement 468 block 166 212 block_exit 166 212 bo te cocher 500 bool 129 214 bool ens 16 118 syntaxe 428 bouclage 162 bound 149 167 215 bound_conc 80 216 bound_mult 105 156 217 bound_size 80 151 218 bound_tree 219 bound_tree 220 1033 Index G n ral Pely bouton 485 501 bouton de terminaison 502 buts 60 syntaxe 440 C call 383 caract res 25 caract re d chappement 430 caract re d sign 430 espace 428 remarques 441 syntaxe 431 cha nes de caract res 13 27 71 85 syntaxe 431 changement de signe 30 char 221 char_code 222 chargement d un programme input 8 check_item 496 clause 384 clear _menubar 497 clear_window 472 clic 480 486 490 491 504 510 close_context_dictionary 183 223 close_input 9 195 224 close_output 11 197 225 cochage d un item 496 command _menu 496 commentaire 442 459 comparaisons num riques 52 conc3 80 154 226 conc_string 85 227 concat nation 12 76 retard e 154 configuration de Prolog II 1006 connu terme 148 console 6 464 1009 constantes 23 bool ennes 119 num riques 97 syntaxe 428 constructeur d arbres 72 1034 de tuples 72 g n ral d arbres 72 consult 385 contexte courant 179 contexte de lecture criture 24 179 contraintes 54 438 bool ennes 16 120 exemples 122 forme normale 123 simplif
58. crochets chevrons et tout couple d op rateurs simples que l on souhaite mettre en correspondance Nous allons maintenant d crire les op rateurs travers un tableau dont le contenu ligne par ligne a la forme suivante 446 ProloglA Bolig Syntaxes les caract res composant l op rateur sauf s il s agit d une famille d op rateurs comme entier en italique un nom interne qui nous servira pr ciser ce qu on a construit le type de l op rateur la pr c dence de l op rateur la pr c dence fournie dans le cas o l op rateur est destin a tre appair un autre ils doivent dans ce cas avoir une m me pr c dence fournie une action parmi empile d pile teste teste non qui permet de manipuler et tester le contexte courant Il faut que l action r ussisse pour que l op rateur soit applicable Ces actions ont pour param tre un caract re voici leurs effets respectifs empile car tablit le nouveau contexte car d pile car teste que le contexte est bien car et restitue le pr c dent contexte teste car teste que le contexte est bien car teste non car teste que le contexte n est PAS car Une action r ussi lorsque le test est v rifi empile r ussi toujours Nom Interne Type Pr c op Pr c bis Action CONTR xf 1300 10001 empile CONTR 1300 10001 empile CONTR 1300 10001 d pile FLECHE 1200 PVIRG 1100 VLISTE 1000 teste VFONCT 1010 teste f
59. cution d un programme si la valeur de N est connue au moment o l on tente d ex cuter le pr dicat bound_size Enfin la syntaxe de Prolog II permet d crire directement des contraintes du type U N ce qui peut sembler en totale contradiction avec les affirmations pr c dentes PrologilA 151 Retardements En fait ce dernier type de contraintes est une facilit de syntaxe Lorsque Prolog II doit traiter une contrainte de ce type il tente d ex cuter avant les autres buts de la r gle o apparait cette contrainte le pr dicat size U N qui est un pr dicat pr d fini et qui utilise notamment freeze bound_size et known_part voir ces pr dicats dans le chapitre r gles pr d finies et proc dures externes Voici un premier pr dicat tr s proche du pr dicat size delayed size T N gt freeze T delayed size T N freeze N bound size T N delayed size El lt gt 0 gt delayed size E U N gt known part U U U bound size U N delayed size U N N U lt gt N 0 On fera deux remarques propos de ce pr dicat e On profite du fait que la taille d un terme est gale celle du tuple form de ses fils e On profite de tout renseignement sur le d but de ce tuple pour ne retarder que les contraintes portant sur la partie de taille inconnue Examinons quelques exemples triviaux on a remplac les variables interm diaires de Prolog II
60. dans la plupart des cas au type requis N pour entier S pour string T pour terme R pour rationnel V pour variable P pour pr dicat etc 200 PrologilA Bolig Bolig R gles pr d finies et proc dures externes On donne ensuite une description plus d taill e de la primitive suivie d exemples de sessions qui la font directement intervenir ventuellement un certain nombre de remarques et pour finir une liste de primitives consulter dont les fonctions se rapprochent de celle consid r e Ce chapitre est s par en deux parties distinctes Une partie d crivant les primitives utilisables en syntaxe standard et une partie d crivant les primitives Edimbourg On trouvera galement la fin de chacune de ces sous parties un index sp cifique concernant les r gles pr d finies les proc dures externes les fonctions valuables ainsi que certains identificateurs importants rencontr s tout au long de ce chapitre PrologIA 201 Ed L a La Ed ol R gles pr d finies et proc dures externes ee add_implicit S1 S2 Fonction Ajout d un identificateur Classe Proc dure externe Prolog M I Cat gorie Gestion des r gles et des identificateurs Param tres connus S1 et 52 Message d erreur Si S1 n est pas le pr fixe d une famille ayant une partie ferm e Description Rajoute l identificateur de nom abr g S2 la partie ferm e du contexte 1 Si S1
61. e 1 Reprendre une d monstration retry Il est tr s utile de pouvoir reprendre un d monstration sans avoir la recommencer partir du d but en particulier lorsque l ex cution du programme pister est fastidieuse de par le temps d ex cution ou de la difficult de se placer ce point pr cis de la d monstration G n ralement lors de l ex cution d un programme erron on a plus ou moins la certitude qu une erreur se produit entre deux points P1 et P2 de cette d monstration et le but de la session de d buggage est de r duire cet intervalle en parcourant l int rieur par des sauts de plus en plus petits afin de d tailler l ex cution Lors de cette recherche souvent dichotomique on passe de temps en temps par dessus l erreur car on retrouve la machine Prolog dans un tat qu on juge incorrect vis vis du programme parfait qu on a en t te On a alors rapproch le nouveau point P2 de P1 et il n y a plus qu a d bugger jusqu P2 si possible Il est bien pratique d viter de relancer la question si on a la possibilit de rester sous la session courante et de pouvoir revenir au point P1 afin de recommencer la section litigieuse du programme Cette premi re version du d buggeur ne permet pas d effectuer une reprise automatique mais fourni des moyens pour r aliser une reprise manuelle Les commandes utiles cette t che sont d crites un peu plus haut dans cette section ce sont changechpt fa
62. e en un appel du pr dicat delayed_mult E E Z De mani re similaire toute contrainte de la forme Z E E o E est une expression contenant des variables est remplac e par un appel de delayed_divide E E Z ProloglA 157 WA Retardements E Cette fa on de faire garantit notamment le respect d un parenth sage ventuel Par exemple les syst mes de contraintes X A B C et X A B A C ne sont pas trait s exactement de la m me fa on Dans le second cas si la valeur de est inconnue le fait de conna tre B ou C d g le une partie de la contrainte alors que dans le premier cas on ne fait rien tant que leur somme n est pas connue Examinons ce processus de retardement sur un exemple non lineaire X Y 2 T V gt Z X Y 2T X 3 2 V Cette r gle est consid r e par le syst me de la mani re suivante non lineaire X Y 2 T V gt delayed mult X Y X delayed divide 2T X 3 2 V Y Zz X Y En fait la r gle pr d finie est mult que l on a renomm pour que vous puissiez tester ces exemples sur votre interpr te Voici un exemple d ex cution o l on connait un nombre suffisant de valeurs pour rendre le syst me lin aire gt non lineaire 2 Y 2Z T 3 Y Y1 T T1 Z 4 13 T1 2Y1 Et un autre o des contraintes restent gel es 158 ProloglA Bolig Retardements gt non lineaire X 3 2 T 2 f OX mea Due O DT
63. elle ne pourra encourir aucune responsabilit du fait des donn es m moris es ou exploit es y compris pour les co ts de r cup ration ou de reproduction de ces donn es L acheteur a toutefois droit la garantie l gale dans les cas et dans la mesure seulement o la garantie l gale est applicable nonobstant toute exclusion ou limitation Droits d auteur Ce manuel et le logiciel qu il d crit sont prot g s par les droits d auteur Au terme de la l gislation traitant de ces droits ce manuel et ce logiciel ne peuvent tre copi s ou adapt s en tout ou en partie sans le consentement crit de ProloglA sauf dans le cadre d une utilisation normale ou pour faire une copie de sauvegarde Ces exceptions n autorisent cependant pas la confection de copies l intention d un tiers que ce soit ou non pour les vendre Prolog III est une marque d pos e de ProloglA D cembre 1991 Pr ologlA Bolig Bolig Introduction Ce manuel entend r pondre un certain nombre des besoins l gitimes de l utilisateur d un nouveau langage de programmation Ces besoins sont d autant plus nombreux que certains des concepts utilis s couramment dans les programmes Prolog III ne sont pr sents dans aucun autre langage Ainsi nous pr senterons ici outre les caract ristiques purement syntaxiques qui d crivent les programmes un certain nombre de consid rations parfois assez complexes qui permettent en cernant les m canismes sous jacen
64. eof eof all DESCRIPTION ProloglA 2029 Outils de mise au point eof termine la lecture et l ex cution de commandes du d buggeur lues dans le fichier ou cette commande est pr sente Avec un param tre ferme tous les fichiers de commandes actuellement ouverts REMARQUES eof ne ferme que les fichiers disque Voir la commande source pour lire un fichier de commandes help tous ports SYNTAXE help help nom de commande DESCRIPTION help permet simplement d afficher la liste des commandes Avec un argument help imprime quelques informations sur nom de commande si celui ci existe Il est possible de documenter les alias cf alias source tous ports SYNTAXE source nom de fichier DESCRIPTION Cette commande permet d ouvrir et de lire un fichier contenant des commandes du d buggeur Prolog III Les commandes y sont lues jusqu la fin du fichier au fur et mesure des besoins du d buggeur Le fichier se substitue donc temporairement la console On utilise essentiellement cette commande pour le chargement d alias et le positionnement de certaines options REMARQUES source est r entrant et ce jusqu une profondeur de cinq appels La commande eof permet de terminer une lecture de fichier 2030 ProloglA Bulag Bolig Outils de mise au point 5 R gles pr d finies de mise au point trace no_trace debug no_debug spy no_spy break 6 Mise au point avanc
65. et l algorithme de simplification sur un sous ensemble de variables voir les remarques concernant cette fonctionnalit nous permet de visualiser les liens entre les variables du sous ensemble consid r dans la question 144 PrologIA Bolig Les contraintes bool ennes SousPossibilite x gt Possibilite y SousEnsemble x y SousEnsemble lt gt y gt SousEnsemble lt e gt x y gt ElementDe e y SousEnsemble x y ElementDe e lt e gt y gt ElementDe e lt e gt y gt ElementDe e y eke Int ressons nous dans un premier temps tablir les rapports ventuels qui existent entre avoir l esprit clair tre populaire et savoir garder un secret Il suffit pour cela de poser la requ te suivante gt SousPossibilite lt lt p avoir l esprit clair gt lt q tre populaire gt lt r savoir garder un secret gt gt La r ponse est l ensemble vide de contraintes et nous signifie que suivant MA Lewis Caroll il n y a aucun rapport entre avoir l esprit clair tre populaire et savoir garder un secret Voyons pr sent quels sont les liens qui unissent les propositions savoir garder un secret tre apte tre d put et valoir son pesant d or On pose la requ te ci dessous gt SousPossibilite lt lt p savoir garder un secret gt lt q tre apte tre d put gt lt r valoi
66. fen tre graphique courante 473 feuille 21 Fexact 108 Ffloat 108 file 497 file window 466 fin de session quit 11 find 497 find_pattern 85 251 findall 250 Fint fract 108 Fnormal 108 fonctions externes C 1010 fonctions valuables 170 FONT 469 471 fonte 472 482 483 484 FONTSIZE 468 471 format_decimal 342 format_float 342 format_out_num 108 341 Fdecimal 341 Fexact 341 Ffloat 341 Fint fract 341 Enormal 341 formats d entr e sorties 108 forme clausale 124 1036 forme normale contraintes bool ennes 123 contraintes num riques 102 forme normale conjonctive 123 formfeed 431 free 149 168 252 free_label 253 freeze 157 254 front_window 466 functor 386 G garbage_collection 255 gcd 256 get 387 get0 388 get_config 257 get_configuration 258 get_integer 1014 1018 1019 get_key 487 get_real 1014 1019 1020 get_screen 466 get_string 1014 1019 1020 get_window 466 GetArg 1014 1015 GetArity 1014 1015 getenv 259 gr_arc 476 gr_arc 477 gr_button_hit 486 gr_choosecolor 482 gr_click 479 480 gr_color 481 gr_color2 481 gr_color3 481 gr_dialog 498 gr_draw_buttons 485 gr_editf 486 gr_erase 474 gr_font 484 gr_getmouse 480 gr_icon 478 gr_line 474 gr_lineto 474 ProloglA Poleg Index G n ral gr_list 489 gr_load 516 gr_mode 482 gr_move 474 gr_moveto 474 gr_pen 482 gr_penloc 474 gr_polygon 476 gr_popupltem 491 gr_print 492 gr_rect 475 gr_setorigin 474 gr_st
67. finie X Y X Y 418 ProloglA Bolig R gles pr d finies Edimbourg X Y Fonction Alternative d ex cution Classe Primitive Edimbourg Cat gorie Contr le Param tres connus X et Y qui doivent tre connus leur appel Messages d erreur Non Description Installe un point de choix Voici ces r gles pr d finies write 2 PrologIA 419 Bulag R gles pr d finies Edimbourg U X Y XIY Fonction Liste de buts ex cuter Classe R gle pr d finie Prolog II Cat gorie Contr le Param tres connus X et Y qui doivent tre connus leur appel Messages d erreur Non Description Ex cute les buts X puis Y Se comporte comme Cette primitive est d crite comme ceci T D X Y X Y Exemples out a out b out c l 420 ProloglA Bolig R gles pr d finies Edimbourg Index des r gles pr d finies proc dures externes et fonctions valuables pour la syntaxe Edimbourg 418 gt 417 lt 411 412 410 415 lt 411 413 416 gt 411 gt 411 420 414 abolish 377 assert 378 asserta 380 assertz 378 atom 381 atomic 382 call 383 clause 384 consult 385 functor 386 get 387 get0 388 is 389 listing 390 member 391 name 392 nl 393 nonvar 394 number 395 op 396 put 397 read 398 retract 399 retractall 400 see 401 seen 402 tab 403 tell 404 told 405 true
68. lt sup gt gt gt lt type d arbre gt lidt boolt numt chart tuple lid fbool num char lt contrainte de typage gt lt terme gt lt type d arbre gt z lt terme gt lt terme gt Relativement ce que nous savions d j cette syntaxe ajoute surtout un d tail il est permis d agglutiner plusieurs contraintes lt lt gt ou condition qu elles soient toutes de type lt lt ou toutes de type gt On pourra donc crire 1 lt x lt ys3 la placde 1 lt x x lt y ys lt 3 ProloglA 55 Concepts de base Exemples Voici des contraintes syntaxiquement correctes X num 1 F lid 2 A B I J 1 3 lt P Durand gt lt Pierre N gt 4 A gt B amp C 5 O lt T lt 3X 4 5Y 6 et des formules qui ne sont pas des contraintes correctes 4X Z 1 TT X 2 A amp B 3 X Y amp Y 2 4 1 2 et 3 souffrent du m me mal ce sont des termes corrects non des contraintes Pour 4 c est plus grave une contrainte ici x x ne peut en aucun cas figurer dans un terme de plus 4 traduit une confusion entre les bool ens l ments du domaine de Prolog II et la v rit ou la fausset des contraintes 8 R solution des syst mes de contraintes Une condition portant sur des arbres est g n ralement la formalisation d un nonc dont implicitement on pr tend qu il est vrai comme a est gal b On peut
69. s vite l utilit de disposer d un moyen pour regrouper les identificateurs selon des crit res logiques ces regroupements tant un moyen pour manipuler ais ment des familles enti res d identificateurs l aide de noms uniques et en m me temps un moyen pour r glementer leur visibilit c est dire pour indiquer quels noms d finis dans une partie d un programme nous dirons module peuvent tre r f renc s dans les autres parties Il s agit donc de partitionner l ensemble des identificateurs connus par un programme Prolog III En peu de mots les outils pour effectuer ce partitionnement peuvent se r sumer de la mani re suivante e la syntaxe compl te des identificateurs prescrit la pr sence d un pr fixe au d but de tout identificateur ProloglA 175 L environnement e l ensemble des identificateurs ayant m me pr fixe est une famille Les familles peuvent tre manipul es globalement de nombreuses primitives agissent sur des familles enti res repr sent es par le pr fixe commun de leurs membres e certaines conventions d finissant des contextes d criture lecture per mettent d crire les identificateurs en omettant leur pr fixe et inversement de compl ter des identificateurs lus sans pr fixe Voyons tout cela un peu plus en d tail Familles d identificateurs Voici la syntaxe compl te des identificateurs lt pr fixe gt lt nom gt lt nom gt orbis l
70. sauf dans le cadre d une utilisation normale ou pour faire une copie de sauvegarde Ces exceptions n autorisent cependant pas la confection de copies l intention d un tiers que ce soit ou non pour les vendre Prolog III est une marque d pos e de ProloglA D cembre 1991 Pr ologlA Bolig Bolig Pr ambule F licitations Vous avez entre les mains le leader d une nouvelle g n ration de langages de programmation en logique Prolog II Ce langage s appuie sur le concept nouveau de programmation logique par contraintes Si on y retrouve bien s r les principes g n raux qui ont fait de Prolog le langage de programmation phare de l Intelligence Artificielle Prolog III repr sente surtout une refonte totale du c ur m me du langage l unification Ceci se traduit par une manipulation plus fine des arbres finis et infinis qui demeurent les objets principaux utilis s par le langage mais galement par la g n ralisation de la notion fondamentale et seulement bauch e dans Prolog II de r solution de contraintes C est gr ce cette notion que l on peut en Prolog II d gager une approche du traitement num rique et du traitement de l alg bre de Boole fondamentalement diff rente des essais qui ont t tent s dans ces domaines par l adjonction de pr dicats valuables multiples et fort loign s de la philosophie de base Prolog III permet donc de poser des syst mes d quations et in quations portant sur des nomb
71. sent par le terme T et que l on ne sait pas si le nombre de ses fils est nul ou non On remarquera au passage que free T n est pas la n gation de known T Par exemple known x choue car x n est pas assez connu on sait que l tiquette est un nombre mais on ne conna t pas sa valeur et free x choue aussi car x est trop connu on sait que c est une feuille 3 Retardement de l ex cution d un but Prolog III permet de retarder l ex cution d un but tant qu un terme n est pas connu toujours au sens de la d finition pr c dente Aussit t que celui ci est connu on tente d ex cuter le but retard Cette op ration de retardement se r alise gr ce au pr dicat valuable freeze X P Nous pouvons examiner ce traitement sur un exemple Admettons que l on d sire construire le pr dicat creer T1 T2 U qui retarde la cr ation du tuple U form des deux l ments T1 et T2 tant que l on ne connait pas le premier de ces deux l ments Voici les r gles correspondantes creer T1 T2 U gt freeze T1 creer Ti T2 U creert Ti T2 lt T1 T2 gt gt On peut examiner une ex cution de cr er qui mettra en vidence les sorties concernant les variables gel es ProloglA 149 Retardements gt creer illusion A T U U lt illusion A T gt Le premier param tre tant connu l tiquette est connue et on sait si le nombre de fils gal un
72. te gt versements capital lt V 2V 3V gt 1000 V 207 413 641 Crypto arihm tique Le probl me consiste affecter aux 8 lettres s e n d m o r y des chiffres tous diff rents de fa on ce que l addition send more money tombe juste La premi re fa on de proc der consiste profiter du fait que l addition la soustraction la multiplication par une constante et les relations lt lt 2 gt IT sont parfaitement connues au niveau des nombres rationnels On fait aussi intervenir le pr dicat pr d fini enum x qui num re tous les entiers x satisfaisant aux contraintes accumul es Le programme est d ailleurs purement d terministe jusqu au moment o l on appelle ce pr dicat Voici le programme solution I J K gt chiffres tous differents lt S E N D M O R Y gt tous _ entiers lt M S O E N R D Y gt S 0O M 0 I 1000 S 100 E 10 N D 1000 M 100 O 10 R E 10000 M 1000 O 100 N 10 E Y J K _ HAE ProloglA 109 Les contraintes num riques tous entiers lt gt gt tous entiers lt X gt S gt enum X tous_entiers S chiffres_tous_differents lt gt gt chiffres tous differents lt X gt S gt hors dei X sS chiffres tous differents S 0 lt X lt 9 hors de X lt gt gt hors de X lt Y gt S gt hors de x S x Y Si l on pose la requ te gt solution I J
73. teur machine_mode e l impression des termes sous debugger tracemode e l cho echo e l ex cution d un pr dicat non d fini undefined_rule e la gestion de l interruption de programme interrupt_is_error e la syntaxe utilis e syntax e la taille maximale d une ligne pour l affichage tty_wrap e le format num rique pour l affichage format_out_num e le format d affichage des flottants format_float e le nombre de chiffres apr s le point d cimal format_decimal e l erreur relative dans les calculs sur les flottants epsilon_float e les statistiques li es l ex cution statistics Voici pr sent les valeurs possibles pour chacun de ces param tres ainsi que les valeurs par d faut machine mode e 0 Fonctionnement normal sans debugger ni trace e 1 Fonctionnement en mode trace e 2 3 Fonctionnement en mode debugger Valeur par d faut O 340 ProloglA Bulag Bolig R gles pr d finies et proc dures externes tracemode e 1 e 2 e 3 Trace de niveau 1 affichage du nom du pr dicat Trace de niveau 2 affichage du nom du pr dicat et de ses argu ments Trace de niveau 3 affichage du nom du pr dicat de ses arguments et du syst me de contraintes relatif aux variables qui interviennent dans les arguments Valeur par d faut 2 echo e O e 1 Pas d cho Affichage sur l unit courante de sortie de toutes les r gles ou requ tes lues sur l unit courante
74. tu e Les fen tres modales peuvent tre empil es Les attributs possibles d pendent du type texte EDIT ou TTY ou graphique GRAPHICS ou MODAL de la fen tre X lt DISTANCE n gt n est un entier qui indique en pourcentage par rapport la hauteur de la partie dessinable de la fen tre l en t te r serv pour une zone de cr ation de boutons Cet attribut est valable pour tout type de fen tre X lt NLINES n gt n est un entier qui indique le nombre de lignes sauver lors d un scrolling dans une fen tre de type TTY PrologIA 467 Primitives graphiques 468 lt SHAPE n gt n est un entier qui d termine la forme de la fen tre Les formes standard sont 0 fen tre avec titre et barres de d filement 1 fen tre cadre Par d faut les fen tres modales ont l attribut 1 et les fen tres de texte l attribut 0 Cet attribut est valable pour tout type de fen tre On notera que les fen tres graphiques n ont pas de barres de d filement lt SAVE r gt Cet attribut ne peut tre appliqu qu une fen tre graphique ou modale Il d finit le rectangle r de la fen tre auquel est associ un bitmap de rafra chissement dans le cas des machines couleur une grande zone peut demander une place m moire importante lt SAVE b gt b est un entier 0 ou 1 indiquant si un bitmap de rafra chissement est associ la fen tre La valeur par d fa
75. x _1 _toto FF 432 ProloglA A ee Syntaxes Un cas particulier de nom de variable est le nom _ dont chaque occurence repr sente une nouvelle variable que l on ne souhaite pas nommer A cette exception pr s cette notation reste exceptionnelle et on lui pr f re la forme suivante sp cifique la syntaxe de base lt variable gt lt lettre gt lt alphanum rique tendu gt avec la restriction que le deuxi me caract re s il existe ne doit pas tre une lettre Voici des exemples de variables syntaxiquement correctes xX X z z p2c x78 x m68000 x__y u 2 a n_ouvelle variable I can N B L usage du caract re est d conseill Prolog III l utilise pour nommer des variables qu il est amen cr er de mani re interne Identificateurs Un identificateur peut tre complet ou abr g Il est complet s il est pr fix lt pr fixe gt lt nom gt lt nom gt orbis lex lt nom gt lt lettre gt lt alphanum rique tendu gt lt identificateur gt lt pr fixe gt lt identificateur abr g sys outm lt identificateur abr g outm Prolog IA 433 Bulag Syntaxes lt identificateur abr g gt lt lettre gt lt lettre gt lt alphanum rique tendu gt On remarquera que la syntaxe des identificateurs abr g s est tr s proche de celle des variables La diff rence retenir est qu une variable d bu
76. 1 Voir galement e in_char in_ident in_integer inl in_real in_sentence in_string in_term next_char next_char ProloglA 261 2 gens 2 Bol R gles pr d finies et proc dures externes L in _char C Fonction Lecture d un caract re qui ne soit pas un caract re de formatage Classe Proc dure externe Prolog M I Cat gorie Entr es sorties Param tres connus Aucun Messages d erreur Fin de fichier inattendue Description Lit le premier caract re dont le code ASCII n est pas inf rieur ou gal 32 caract res de formatage espace retour chariot tabulations etc sur l unit active d entr e Si une fin de fichier est d tect e une erreur est signal e et tout se passe comme si on avait fait un close_input Exemples gt in _ char C a in_char C in char C HAS Voir galement e in_char in_ident in_integer inl in_real in_sentence in_string in_term next_char next_char 262 ProloglA Bolig R gles pr d finies et proc dures externes in ident I Fonction Lecture d un identificateur Classe Proc dure externe Prolog M II Cat gorie Entr es sorties Param tres connus Aucun Messages d erreur Fin de fichier inattendue Description Lit un identificateur sur l unit active d entr e Si une fin de fichier est d tect e une erreur est signal e et tout se passe comme si on avait fait
77. 406 var 407 write 408 writeq 409 PrologiA 421 LISE PITA T HERITAGE Bolig Les syntaxes de Prolog Ill 1 Introduction Choix du mode syntaxique Points communs diff rences Conventions grammaticales Jeu de caract res Constantes communes 2 Syntaxe de base Variables Identificateurs Termes Contraintes R gles et requ tes Quelques remarques 3 Syntaxe d Edimbourg Variables Identificateurs Termes Contraintes R gles et requ tes Quelques remarques 4 Remarques g n rales Que trouve t on dans ce chapitre Vous pouvez utiliser Prolog III travers deux syntaxes diff rentes appel es ici syntaxe de base et syntaxe Edimbourg leur description est l objet de ce chapitre D cembre 1990 Pr ologlA Syntaxes 1 Introduction Choix du mode syntaxique Au d marrage d une session Prolog II la syntaxe utilis e est la syntaxe de base Vous pouvez en changer en ex cutant la commande gt edinburgh L apparition du prompt d Edimbourg vous indique le succ s de votre manipulation Les requ tes peuvent tre donn es imm diatement par contre pour l entr e des r gles il faut utiliser les pr dicats pr d finis insert ou consult Vous devez savoir que pour revenir en syntaxe de base il vous suffit d ex cuter prologIII gt Points communs diff rences Disons bri vement que
78. 495 Primitives graphiques Bulag 496 style_menu u c v Sp cifie le style d un item de menu v est un entier dont chaque bit repr sente un des styles sp cifi s avec l ordre d fini dans la primitive gr_text Exemple mettant en italique soulign l item trace du menu Fen tres bit 1 bit 2 positionn s gt style_menu 0 Fenetres trace 6 clear menubar Appelle save_menubar puis efface la barre de menu standard Cette primitive permet la red finition compl te de la barre de menus save menubar M morise la barre de menu courante Cette r gle ne peut tre appel e qu une fois restore menubar Restaure la barre de menu sauv e avec save menubar add stdmenu s Cette primitive permet de r ins rer un ou plusieurs menus standard apr s un appel clear_menubar La cha ne s doit tre l une des suivantes apple pour r ins rer le menu pomme file pour r ins rer le menu Fichier edit pour r ins rer le menu Editer find pour r ins rer le menu Recherche control pour r ins rer le menu Contr le window pour r ins rer le menu Fen tres ProloglA Bolig Primitives graphiques 8 Gestion des bo tes de dialogue D finition d un dialogue standard gr_dialog d 11 12 gr_dialog p d 11 12 L utilisation de cette primitive n cessite le chargement pr alable du module dial mo3 Ce module contient le gestionnaire de dialogue Prolog IIT perme
79. 7 D tection de panne dans un additionneur circuit p3e Le programme D tecteur de pannes Notez que la 3 me contrainte de la r gle suivante contient le terme U1 U2 parenth s afin de pallier une erreur dans l analyse de cet op rateur OU xj circuit lt X1 X2 X3 gt lt Y1 Y2 gt lt P1 P2 P3 P4 P5 gt atMostOneTrue lt P1 P2 P3 P4 P5 gt P1 gt Ul lt gt X1 amp X3 P2 gt U2 lt gt X2 amp U3 P3 gt Y1 lt gt U1 U2 P4 gt U3 lt gt X1 lt gt X3 P5 gt Y2 lt gt X2 lt gt U3 atMostOneTrue P orOnAtMostOneTrue P _ p orOnAtMostOneTrue lt gt 0 orOnAtMostOneTrue lt E gt P E V orOnAtMostOneTrue P V E amp V 0 Ces r gles sont utilis es par le second jeu de questions booleans lt gt booleans lt B gt L boolean B booleans L boolean 0 boolean 1 Premier jeu de questions circuit lt 1 1 0 gt lt 0 1 gt lt P1 P2 P3 P4 P5 gt circuit lt 0 0 1 gt lt 0 1 gt lt P1 P2 P3 P4 P5 gt circuit lt 1 0 1 gt lt 0 0 gt lt P1 P2 P3 P4 P5 gt circuit lt X1 X2 X3 gt lt V1 Y2 gt lt P1 P2 1 P4 P5 gt PrologilA 543 WA Annexes E Second jeu de questions circuit lt X1 X2 X3 gt lt Y1 Y2 gt lt P1 P2 1 P4 P5 gt booleans lt X1 X2 X3 Y1 Y2 gt circuit lt X1 X
80. Bolig R gles pr d finies et proc dures externes undef_array I Fonction D salloue un tableau cr par def_array Classe Proc dure externe Prolog II Cat gorie Gestion des r gles et des identificateurs Param tres connus I Messages d erreur Voir ci apr s Description D salloue un tableau cr par la primitive def_array et r cup re la place correspondante Exemples def _array tab 100 assign tab 50 3 val tab 50 X undef array tab gt val tab 50 xX Erreur 246 Erreur dans val gt undef array X1l1 Erreur 233 Identificateur attendu 2 gt Voir galement e assign def_array redef_array val 366 ProloglA Bolig R gles pr d finies et proc dures externes val T1 T2 Fonction Evalue une expression construite partir de fonctions valuables Classe Proc dure externe Prolog IM II Cat gorie Contr le Param tres connus Voir ci apr s Messages d erreur Voir ci apr s Description Evalue l expression T1 et produit le r sultat T2 L expression valuer est construite r cursivement partir des constantes des identificateurs des l ments de tableau et des fonctions valuables Exemples gt val add mul 2 add 3 4 1000 x 1014 gt val 2 3 4 1000 x X 1014 Remarques Chaque fonction valuable doit avoir des arguments d un type pr cis il n y a pas de conve
81. Ed L ka Ed ANA R gles pr d finies et proc dures externes e known T Fonction V rifie que T repr sente un terme connu Classe R gle pr d finie Prolog MI I Cat gorie Contr le Param tres connus gE Messages d erreur Non Description S ex cute avec succ s si le terme T repr sente un terme suffisamment connu c est dire un arbre e dont l tiquette est connue e dont on sait si le nombre de fils est nul ou non Echoue dans le cas contraire T E L Exemples gt known E lt gt gt known arbre U known arbre U U lt gt U X1 X2 X1 1 known X Voir galement e free bound 284 ProloglA A gt Ed L2 gt s L a R gles pr d finies et proc dures externes known_part U1 U2 U3 Fonction Extraction de la partie connue d un tuple Classe R gle pr d finie Prolog III Cat gorie Arbres listes cha nes et tuples Param tres connus Voir ci apr s Messages d erreur Non Description Pose la contrainte U1 U2 U3 o U2 est un tuple form de la plus grande suite connue des premiers l ments de U1 Par connu on entend avoir une tiquette connue et savoir si le nombre de fils est nul ou pas Exemples gt known part Ul U2 U3 U1 lt 1 2 3 gt lt 4 Xx 6 gt U1 lt 1 2 3 4 X 6 gt U2 lt 1 2 3 4 X 6 gt U3 lt gt known part Ul U2 U3 U1 lt 1 2 3 gt
82. F qui doit tre une cha ne Messages d erreur Fin de fichier inattendue Impossible d ouvrir le fichier Erreur de syntaxe Paquet d j existant Description Cette r gle pr d finie permet d ajouter des r gles dans l ordre dans lequel elles sont lues partir du fichier F Les requ tes rencontr es sont ignor es La lecture se termine soit lorsque l on rencontre la fin du fichier soit lorsqu on rencontre une r gle vide c est dire en syntaxe de base ne contenant qu un Si une erreur de syntaxe est rencontr e un avertissement est affich et un certain nombre de caract res en principe tous les caract res jusqu un sont ignor s puis l insertion reprend insert provoque une erreur lorsque un paquet lu existe d j Dans ce cas Prolog III sort du mode insertion mais ne ferme pas les fichiers qui taient ouverts il continue donc lire le s fichier s en cours les r gles sont ins r es et les requ tes ex cut es Selon que l on a par ailleurs activ ou non le mode cho cf r gle echo les r gles sont affich es sur la console au fur et mesure de leur lecture Voir galement o insert reinsert reinsert E 274 PrologilA A gt 2 L2 bd L a R gles pr d finies et proc dures externes integer N Fonction V rifie que I est un nombre entier connu Classe Proc dure externe Prolog M II Cat gorie V rifications de types Param tres co
83. IIT appelle cette fonction avec pour arguments les valeurs suivantes Ptr_vers_PEV est l adresse du terme Prolog IIT correspondant l appel de la r gle externe c est dire l adresse du but effacer Il s agit donc un arbre dont l tiquette est le nom de la r gle externe et dont les fils sont les arguments de l appel Num_ident_du_PEV est un nombre entier identifiant la r gle externe en question UserRule Ptr_ vers _ PEV Num _ident du _PEV La valeur retourn e par la fonction UserRule d termine si l ex cution de la r gle externe a r ussi ou chou Si UserRule renvoie une valeur non nulle par exemple la constante TRUE alors Prolog II consid re que pour ce qui concerne le programme externe l effacement a r ussi Si au contraire UserRule renvoie z ro FALSE alors l ex cution de la r gle externe est consid r e comme se soldant par un chec ce qui produira un backtracking L essentiel de la fonction UserRule est constitu par une instruction d aiguillage switch portant sur la valeur Num_ident_du_PEV Pour ajouter une nouvelle r gle externe Prolog III il vous suffit d ajouter un cas cet aiguillage en correspondance avec le num ro choisi pour repr senter la r gle En g n ral pour une nouvelle r gle externe vous ajouterez les instructions C suivantes e d abord un certain nombre d appels de la fonction GetArg pour obtenir des pointeurs vers les arguments de l appel de la r gle
84. Les vi sont soit nuls soit positifs pour d signer des segments qui montent soit n gatifs pour d signer des segments qui descendent Les v des lignes sup rieures ne sont jamais n gatifs et si une zone n est pas vide seul le premier segment vertical vo de sa ligne inf rieure est n gatif Si l on applique ces conventions la totalit du rectangle figure droite pr c dente la ligne inf rieure 1 peut tre repr sent e par la suite 1 a 1 et la ligne sup rieure L par une suite de la forme 0 h1 0 hn 0 avec h1 h a tous les h tant positifs PrologiA 113 Bulag Les contraintes num riques Le c ur du programme est la proc dure remplir_zone L L C C qui remplit de carr s une zone d limit e inf rieurement par 1 et calcule sa d limitation sup rieure L Les carr s sont puis s dans le d but de la liste c et c est la liste de carr s qui restent Cette proc dure fait appel la proc dure placer_carre b L L qui place un carr de dimension b xb dans le coin inf rieur gauche de la zone remplir Ici d signe la ligne inf rieure de la zone mais de laquelle on a enlev le premier segment vertical et z d signe la ligne descendant du coin sup rieur droit du carr pour rejoindre et se prolonger dans le reste de la ligne z La figure ci dessous montre les trois cas qui se pr sentent Soit le carr d borde sur la premi re marche qui en fait tait une fausse marche de hauteur null
85. NumP extended d long int Convert NumP to ExtendedC adr t extended f endif PrologiA Pelog Utilisation de Prolog IHI sur Macintosh Fichier userrule c include macuser h extern adr TheCurrentPev long int UserRule Ptr_vers_PEV Num ident du PEV adr Ptr vers PEV long int Num ident du PEV int err 0 err nb 0 TheCurrentPev Ptr vers PEV switch Num ident du PEV Utilisez des numeros superieurs a 500 inserez ici vos propres regles default ProPrintf sorerr User Rule 1d Not Defined n Num ident du PEV return FALSE PrologiA 1031 Utilisation de Prolog III sur Macintosh Poly 1032 ProloglA Index G n ral coupure 164 418 gt 417 coupure 164 lt 411 lt gt tuple vide 27 412 410 415 lt 411 413 416 gt 411 gt 411 liste vide 33 symbole fonctionnel 83 1420 414 A abandon de l ex cution d un but block_exit 166 abolish 377 abs 172 369 activate_ button 515 add 170 368 add_implicit 183 202 add_stdmenu 497 addition 30 98 affectation 47 affectation assign 173 affectation bool enne 125 ajout d une r gle assert 186 PrologiA Index appels externes Prolog III 1025 apple 497 arbres 20 70 arbres factuels 71 arbres infinis 75 arg 81 203 arg2 84 204 arg3 80 205 arithm tique 14 assert 186 206 378 assert 187 208
86. Outils de mise au point REMARQUE Si l on n tait pas en mode d bug au moment o la requ te est lanc e locus ne peut donner d information compl te concernant la d monstration r alis e en amont du passage en mode d bug ls tous ports SYNTAXE ls DESCRIPTION Cette commande implant e par un alias utilisant locus est simplement un raccourci pour indiquer qu on souhaite afficher la d monstration courante c a d l ensemble des appels depuis la requ te resol tous ports SYNTAXE resol resol nb resolvantes DESCRIPTION Cette commande assez similaire la commande locus permet de montrer les r solvantes locales restes de corps de r gles par niveau celles ci correspondant aux litt raux qui restent effacer L impression correspond en gros au buts situ s droite du caract re visible par la commande locus Avec un argument nb resolvantes correspond au nombre de niveaux imprimer partir du bas de l arbre ProloglA 2013 Outils de mise au point gt aa x gt bb x cc x gt bb x gt eq x 1 gt aa u new query 1 1 CALL aa u DBG s 1 1 RULE r1 aa u aa x 1 DBG 1 1 ok r1 aa u DBG 2 2 CALL bb u DBG 2 2 RULE r1 bb u bb x_2 DBG 2 2 ok r1 bb u DBG 3 3 CALL eq u 1 DBG resol eq u 1 DBG resol 10 eq u 1 cc u DBG rs tous ports SYNTAXE rs DESCRIPTION Cette
87. Pour effacer block E C B on efface B en ayant auparavant cr une paire de parenth ses fictives tiquet es par E et ventuellement par C autour du but B e Le deuxi me param tre C de block E C B peut tre consid r soit comme une seconde tiquette soit comme un compl ment d information qui sera retourn par block_exit E C Certaines r gles pr d finies utilisent ce deuxi me param tre comme compl ment d information en transmettant l argument cause de l erreur e block_exit E C provoque l abandon imm diat de l effacement de tous les buts inclus entre les parenth ses tiquet es par E et C L effacement continue ensuite comme si block E C B s tait effac mais sans laisser aucun choix pour le ou les buts B en attente De plus e Les tiquettes dont il est question ci dessus sont des termes Prolog II quelconques et on consid re que pour que deux termes repr sentent la m me tiquette au regard du m canisme block_exit il faut et il suffit qu ils soient unifiables ProloglA 211 R gles pr d finies et proc dures externes e S il y a plusieurs parenth ses tiquet es par E etC block_exit E C s arr te au couple de parenth ses le plus interne e Si block exit E C ne rencontre pas de parenth ses E et C on revient au niveau de commande avec si E n est pas un entier le message d erreur Erreur 50 Block ind fini ou le message correspondant l erreur E si E est un
88. Prelog e un premier syst me form des proc dures C GetArity GetArg PutArg Convert_StringC_to_StringP Convert_LongintC_to_IntP Convert_ExtendedC_to_NumP Convert_DoubleC_to_NumP Convert_StringP_to_StringC Convert NumP_to_ExtendedC Convert NumP_to_DoubleC Convert_IntP_to_LongIntC e un deuxi me syst me de transfert de donn es compatible avec celui de Prolog II form des proc dures C get_integer get_real get_ string put_integer put_real put_string Premier protocole de transfert de donn es Le premier syst me se compose d un jeu de fonctions g n rales et de fonctions de conversion Il faut donc proc der en deux temps Pour r cup rer une donn e partir d une structure Prolog r cup rer l argument correspondant fonction GetArg puis le convertir Pour fournir une donn e une structure Prolog convertir cette donn e en un terme Prolog puis instancier l argument correspondant fonction PutArg Fonctions g n rales long GetArity term adr term adr GetArg no_arg term long int no_arg adr term 1014 ProloglA Pelog Utilisation de Prolog III sur Macintosh long PutArg no_arg term value long int no_arg adr term adr value term d signe l adresse d un terme dont on s int resse l arit GetArity ou un fils GetArg PutArg En g n ral term pointera l appel de la r gle externe obtenue travers l argument Ptr_vers_PEV de l appel de UserRule No
89. ProloglA Bulag Bolig Arbres tuples cha nes et listes 5 Les listes Pour des raisons d efficacit et bien que l op rateur binaire utilis pour les listes en Prolog classique puisse tre ais ment remplac par une conca t nation Prolog III permet l utilisation de listes classiques construites sur la notion de paire point e l aide d un symbole fonctionnel binaire repr sent par l Syntaxiquement les formes suivantes sont permises U L qui repr sente une liste de t te u et de queue L U1 U2 Un qui repr sente une liste form e des l ments u1 Uu2 Un U1 U2 Un L qui repr sente une liste dont les premiers l ments sont u1 u2 un et la queue de liste amp Bien que la syntaxe ne soit pas ambigu vous devez veiller ne pas confondre l op rateur binaire utilis pour les listes et repr sent par des crochets par exemple tu pour une liste r duite un l ment et l op rateur n aire de construction g n rale d arbres repr sent par le m me symbole par exemple Elu ATTENTION il y a une v ritable ambigu t dans le fait suivant comment distinguer une liste ayant pour t te et B pour queue qu on doit noter A B d une liste r duite l unique bool en r sultat de la disjonction des bool ens a et B qu on devrait noter encore A B Cette ambigu t est lev e en imposant convention nellement dans le second cas le parenth sage d
90. R1 R2 maximize R maximum R1 R2 minimum R1 R2 no debug no spy lt I A gt no spy sS set config S N spy lt I A gt spy S upper _ bound R1 R2 PrologIA Des primitives num riques plus performantes pour l optimisation de probl mes lin aires minimize maximize sont introduites Les primitives min value max value sont d sormais obsol tes et remplac es par minimum lower bound maximum upper bound Le pr dicat cut a t retir de cette version doit tre utilis la place De nouveaux messages d erreur ont t introduits dont en particulier Fin de fichier et Fin de fichier inattendue Ceci afin de permettre une meilleure prise en compte des erreurs de lecture Signalons au programmeur que par d faut la tentative d effacement d une r gle non d finie ou d un but non ex cutable affiche un avertissement sur la console L option undefined_rule du pr dicat set_config est maintenant positionn e warning Le manuel de la version 1 3 se pr sente sous la forme d un classeur et deux cahiers s par s un pour le manuel d utilisation un autre pour la mise au point de programmes debugger Pour conclure ce pr ambule rappelons que nous restons toujours ouvert toutes les remarques que vous pourrez faire au sujet du logiciel ou de cette documentation et que nous tenterons de r pondre le mieux possible vos suggestions ou critiques ventuelles PrologIA
91. T SOLE un RAS int etes Ta 192 ENIT S r T ee dense dose 193 DOFHES SNS nn Lt Mr Nem an E E 195 5 Autres l ments de l environnement 198 S rtir de Prolog IT sine nets el a 198 Temps autres mesures ss 198 R gles pr d finies et proc dures externes 199 Te Mtroduttionisi egiii neie a aa aiiis 200 Index des r gles pr d finies proc dures externes et fonctions VAlUADIES sn iaaii re iaaiiai 371 R gles pr d finies et proc dures externes Edimbourg 375 dentificate r Arite Re NS a nn ME NE 376 R gles sous forme de termes 376 Index des r gles pr d finies proc dures externes et fonctions valuables pour la syntaxe Edimbourg 421 viii ProloglA Bolig Pay Table des mati res Les syntaxes de Prolog I atinsnndaitnineminntitie 423 Le TntroducHom en nn en a An ne TS A al 424 Ch ix d mode SM ENIQUe as fn se Ne 424 Points communs diff rences 424 Conventions grammaticales sssssseseisisssssreeettttttssssssteetttentesssssreeet 426 Jeurd caract res 183 M Rene moe cel Ne Te Ne ae 427 CONSLANT SS NI Re Re una encens tenta tele 428 2 Oyntaxe de Dassin itunes 432 VATADI S RTS Re nt ne AN rer 432 Identificat uirs oeie o teens ani EEA dde EFAN Ta 433 TOONE S ei e ERE E EEE E SE 435 Expressions num riques 436 Expressions bool ennes 437 Arbres et Termes its des SN A A nt 437 Contraintes ES en ere nee MORE AT
92. X 3 0 U X 3 2T Comme on pouvait s y attendre il demeure un freeze en place sur la division celle ci comportant des variables inconnues dans l expression qui en constitue le diviseur La multiplication lin aire l appel a pu tre ajout e au syst me de contraintes On pourra galement noter ici les limitations de ce processus de retardement qui ne garantit en rien la d tection syst matique des ensembles de contraintes non lin aires incoh rents En voici deux exemples gt X X 2 X X 2 gt XY gt 0 X gt O0 gt Y Y y Y X U X gt 0 Y gt 0 U gt 0 gt ststs ProloglA 159 LISE PITA T HERITAGE Bolig Le contr le et l environnement des programmes Le contr le Expressions variables statiques tableaux Structuration saisie Entr es sorties Autres l ments de l environnement AB SIDE EE Que trouve t on dans ce chapitre De tout Ce chapitre pr sente en effet un ensemble fort disparate de notions qu on pourrait regrouper sous l appellation les moyens de programmer effecti vement en Prolog II Il y sera question des outils pour contr ler l ex cution des programmes afin de les rendre plus rapides comme le c l bre ainsi que de la mani re de structurer les gros programmes en modules et les directives pour interfacer harmonieusement ces derniers On parlera aussi de l ensemble d
93. a2 la variable x etc Une affectation n est donc rien d autre qu une application d finie en extension l ment par l ment d un ensemble de variables dans le domaine de Prolog II Soit t un terme chaque affectation A de l ensemble des variables figurant dans t permet de transformer ce dernier en un arbre a t a Grosso modo il suffit de remplacer chaque variable de t par sa valeur dans A Si on voulait tre plus rigoureux il faudrait d finir t 4 pour chaque mod le de terme t de la mani re suivante sit se r duit une constante k alors a est l arbre k sit se r duit une variable x alors a est l arbre donn pour valeur x dans l affectation A sit est de la forme lt t1 t2 tn gt et si 41 42 An sont les arbres t1 A t2 A tnja alors a est l arbre lt 41 42 An gt sit est de la forme t1 t2 tn et si a1 a2 an sont les arbres t1 A t2 A fnfA alors si a est une feuille alors a est l arbre a1 42 an sinon 4 est ind fini ProloglA 47 Bolig Concepts de base sit est de la forme t t2 et si a1 et 42 sont les arbres t1 A et t2 4 alors si a est une feuille et 42 un tuple alors a est l arbre a1 42 sinon 4 est ind fini etc Par exemple l affectation P 2 1 lt 3 permet de transformer le terme lt P L 2P 4L gt en l arbre lt 2 3 2 2 4 3 gt C est dire lt 5 16 gt Des termes particu
94. a2 A la condition bien entendu que cela ne change pas le sens de ce qui est crit Mais attention il y a quelques pi ges passablement vicieux voyez le 5 6 L op ration binaire division a1 a2 a1 M La division n est d finie que si 42 est diff rent de z ro Des termes corrects exprimant des op rations arithm tiques ainsi que des fautes ne pas commettre sont montr s au 5 Op rations de construction d arbres Ces op rations permettent de construire des arbres non r duits des feuilles Nous avons 1 L op ration de construction d arbre a1 42 An gt a1 M2 An Pour que cette op ration soit d finie il faut que n gt 2 et que a1 soit une feuille Elle a pour r sultat l arbre dont l tiquette est a1 et dont les fils sont A2 Un 2 L op ration de construction de tuple 41 An gt lt 41 An gt 1 En toute rigueur il faudrait dire l arbre dont l tiquette est l tiquette de 41 mais comme nous l avons dit Prolog III ne distingue pas une feuille de son tiquette ProloglA 31 Bulag Concepts de base Elle est d finie quelque soit le n uplet a1 an la condition que n 1 elle a pour r sultat le PIII tuple dont a1 4 sont les l ments On dit que n est la longueur du tuple construit L galit suivante d coule de la d finition m me des tuples lt 41 An gt lt gt A1 An 3 L op
95. apporter certains claircissements concernant les expressions rencontr es au cours des sorties lors de l utilisation du pr dicat valuable 1ist par exemple Les quations Tout d abord examinons la forme normale utilis e pour le codage des quations Dans une galit entre des expressions num riques une variable est privil gi e c est une variable dont le domaine g n ral des valeurs possibles englobe le domaine g n ral des valeurs possibles des autres variables On choisira dans l ordre une variable de type arbre num rique non contrainte num rique contrainte repr senter une valeur positive ou nulle Cette variable dans le cas ou plusieurs variables sont candidates le choix est arbitraire ou plus pr cis ment non maf trisable par l utilisateur est alors exprim e en fonction des autres variables 102 ProloglA Bolig Les contraintes num riques Pour visualiser cette mise sous forme normale interrogeons l interpr teur gt 1X 1 2 Y 22Z 4 Z 1 4 v 1 2 xX 2 gt X 1 2 Y 2Z 4 X 2Z 1 2 v 4 gt 1X 1 2 v 2Z 4 Z gt 0 Y 2X 47 8 Z gt 0 Dans le premier exemple les trois variables x yetz sont des variables num riques non contraintes Dans le second exemple x est une variable de type arbre quelconque les deux variables x et z sont des variables num riques non contraintes Dans le troisi me exemple z est une variable nu
96. au moins est flottant est d finie par une relation de la forme x y lt o est un seuil qui prend en compte l ordre de grandeur de x et y les particularit s de la repr sentation des nombres flottants dans la machine utilis e et ventuellement une estimation de l erreur commise dans l expression o x et y apparaissent les cas restants c est dire les deux bool ens 0 et 1 et le tuple vide lt gt sont sans myst re chacune de ces valeurs est diff rente des autres Implication La condition a1 gt 42 s nonce les arbres a1 et a2 sont tous les deux des bool ens et si a1 vaut 1 alors 42 vaut 1 Puisque 41 et a2 sont des bool ens il n existe que quatre cas possibles et nous pouvons d finir cette contrainte par un tableau a1 a2 la contrainte 41 gt 42 est elle satisfaite 0 0 oui 0 1 oui 1 0 non 1 1 oui Comparaisons num riques Les conditions 52 A1 lt a2 a1 lt a2 a1 gt a2 a1 gt a2 PrologIA Bulag Bolig Concepts de base sont v rifi es si les arbres a1 et a2 sont tous les deux des nombres et si a1 est inf rieur resp inf rieur ou gal sup rieur sup rieur ou gal a2 Relations unaires Les relations unaires sont souvent appel es des relations de type car elles concernent principalement la nature de l tiquette du n ud initial de l arbre sur lequel elles portent Dans certains cas elles mettent aussi en jeu le nom
97. au moins une affectation bool enne qui en soit solution insoluble sinon Exemples e Le syst me a gt b b gt c c gt a est soluble et admet les deux solutions suivantes X a 1 b 1 c 1 et X a 0 b 0 c 0 e Le syst me a b 1 a c 1 a b b c n admet lui aucune solution et est donc insoluble 126 ProloglA Bolig Les contraintes bool ennes Simplification de syst mes de contraintes Lorsque l on parle de simplification de contraintes cela recouvre g n ra lement deux aspects tr s diff rents Le premier aspect de la simplification est de rendre le syst me consid r le plus lisible possible gr ce une forme normale agr able mais surtout la suppression du plus grand nombre de redondances principalement pour en diminuer la taille Le second aspect concerne l limination des variables inutiles Pour ce qui est du premier aspect Prolog III ne supprime pas toutes les redondances dans les contraintes bool ennes mais garantit cependant que chaque fois que le domaine des valeurs possibles pour une variable est r duit un l ment l quation correspondante figure dans le syst me de contraintes Examinons par exemple la requ te suivante et la r ponse fournie par l interpr teur gt alble 1 a gt b b gt c ansi asb La variable c est contrainte de repr senter la valeur 1 dans toutes les solu tions du syst me initial L qu
98. au point SYNTAXE no debug DESCRIPTION Cette commande sort du mode d bug et poursuit l ex cution du programme en cours Aucun point d arr t ou point espion ne sera plus en mesure de se faire conna tre moins que les pr dicats pr d finis debug ou break ne soient employ s par le programme REMARQUE Il existe une primitive Prolog III qui s appelle galement no_debug kill tous ports SYNTAXE kill DESCRIPTION Cette commande abandonne l ex cution du programme en cours et renvoie l interpr teur Prolog II qui attend un autre but Le mode d bug reste actif p4 tous ports SYNTAXE p4 DESCRIPTION Cette commande positionne les options breakport et printport de sorte que les seuls ports prendre en compte soient les quatre ports standard CALL EXIT REDO FAIL p7 tous ports SYNTAXE ProloglA 2027 Outils de mise au point Pelig p7 DESCRIPTION Cette commande positionne les options breakport et printport de sorte que les tous les ports soient pris en compte Cette commande est d finie par un alias t1 t2 t3 tous ports SYNTAXE EL t2 t3 DESCRIPTION Cette commande positionne l option tracemode en fonction du nombre qui appara t dans la commande On se ref rera l option tracemode et aux diff rents niveaux de trace pour plus de d tails Ces commandes sont d finies par des alias 9 Commandes annexes Cette section d crit un certain nombre de
99. c demment s appliquent t ce doit tre une constante Lorsqu on veut obtenir la valeur d un l ment de rang du tableau si cet l ment n a pas t affect assign ou encore si la valeur du rang i est l ext rieur des bornes du tableau val produit une erreur Exemple gt def array tableau 10 15 gt assign tableau 5 cinq gt val tableau 5 x x cing gt val tableau 4 x Erreur 246 Erreur dans val gt val tableau 11 x Erreur 246 Erreur dans val gt ProloglA 173 Doli L environnement rog def_array i n D finit dynamiquement un tableau de constantes Prolog de nom i et de taille n Ce tableau se comportera comme une variable globale et statique Les valeurs l gales de l indice sont les l ments 1 2 n Si un tableau de m me nom existe d j s il s agit d un tableau de m me taille il ne se passe rien siles tailles diff rent il se produit une erreur L acc s et l affectation aux composantes des tableaux sont analogues ceux des tableaux des autres langages de programmation Le tableau est d sallou lorsqu on supprime par exemple par kill_module le module auquel il appartient Exemple la gestion d une pile gt insert inc i gt val i x assign i x 1 dec i gt val i x assign i x 1 initialise gt assign pointeur 1l def array pile 100 empile v gt val pointeur p assign pile p v inc
100. chec Classe R gle pr d finie Prolog II Edinburgh Cat gorie Contr le Param tres connus Voir ci apr s Messages d erreur Non Description R alise une n gation par chec Voici la r gle not T in extenso not P gt P fail not P gt Et en syntaxe Edinburgh not P P fail not P Remarque Puisque not lance un but son comportement peut d pendre du posi tionnement du param tre undefined_rule de la primitive set_config si on est susceptible de lancer des buts non d finis ProloglA 305 Ed L ka Ed ol R gles pr d finies et proc dures externes ee num R Fonction v rifie que R repr sente un nombre connu Classe R gle pr d finie Prolog II Cat gorie V rification de types Param tres connus R Messages d erreur Non Description Cette r gle pr d finie v rifie que R est un terme repr sentant une valeur num rique connue Si ce n est pas le cas num R choue Exemples num 1960 num 3X 2 num X X gt 0 Y gt 0 X Y 12 2X 4Y 34 Remarques Cette r gle pr d finie ne teste pas seulement que R repr sente une valeur num rique la r gle pr d finie is_num R effectue cette v rification Le terme R peut tre contraint repr senter une valeur num rique connue dans le cas o pour toutes les solutions du syst me de contraintes courant R repr sente la m me valeur voir le troisi me exemple
101. choisi dans l appel de la r gle externe Le premier argument de la r gle externe a le rang 1 le second a le rang 2 et ainsi de suite Si la valeur effective de no_arg ne correspond pas un argument effectif dans la r gle externe alors il se produit une erreur value est l adresse de la variable qui est l argument de rang no_arg dans la r gle externe Si son type ne correspond pas celui requis par la fonction un backtracking est automatiquement g n r Pour les param tres de type cha ne de caract res value doit tre l adresse d un tableau de taille suffisante pour contenir la cha ne d fini dans le programme externe err est une variable positionn e 1 si une erreur s est produite ou si un backtracking a t g n r Le programme externe n est pas autoris r cup rer ce type d erreur Pour un comportement correct du syst me de gestion des erreurs on doit imm diatement sortir du programme externe si err est non nulle Ces fonctions retournent une valeur qui est l oppos e en tant que valeur bool enne de l argument err get_integer no_arg value err V rifie que l argument de rang no_arg est un entier pouvant tenir dans un int C et le transf re dans la variable ou la zone m moire dont value est l adresse PrologilA 1019 Utilisation de Prolog III sur Macintosh get_real no_arg value err V rifie que l argument de rang no_arg est un flottant et le transf re dans la variable o
102. ci dessus il faut remarquer que l on peut avoir des r sultats inattendus si p contient des variables libres C est ce que montre le petit exemple suivant gt list homme Abelard gt femme x gt non homme x gt femme Abelard gt femme Eloise gt femme x eq x Eloi ise gt block e b block_exit e block est une r gle pr d finie qui permet de terminer brutalement l ex cution d un but b On peut consid rer que pour ex cuter block e b on ex cute b en ayant auparavant cr une paire de parenth ses fictives tiquet es par e autour du but b block_exit e provoque l abandon imm diat de l ex cution de tous les buts inclus entre les parenth ses tiquet es par e L ex cution continue ensuite normalement apr s avoir restaur l environnement comme il l tait avant l ex cution de b De plus 166 l tiquette dont il est question ci dessus est un terme Prolog III quelconque et on consid re que pour que deux termes repr sentent la m me tiquette au regard du m canisme block_exit il faut et il suffit qu ils soient unifiables s il y a plusieurs parenth ses tiquet es par e block_exit e s arr te au couple de parenth ses la plus interne si block_exit e ne rencontre pas de parenth ses tiquet es par e alors une erreur est signal e PrologilA Bolig Bolig L environnement Interruption A tout instant un progra
103. commandes utilitaires Certaines permettent de personnaliser son environnement sous d buggeur alias eof help source alias tous ports SYNTAXE alias alias nom alias nouveau nom d finition alias nouveau nom d finition aide 2028 ProloglA Bolig Outils de mise au point DESCRIPTION Permet de cr er un synonyme d un ensemble de commandes La forme un argument permet de lister l ensemble des noms actuellement d finis La forme deux arguments affiche la d finition de l alias de nom nom La forme trois arguments permet de d finir nouveau_nom avec la d finition d finition qui est une suite d une ou plusieurs commandes s par es par un point virgule La forme quatre arguments est quivalente la forme trois et permet en plus d ajouter une ligne d aide visible travers la commande help L int r t d un alias est de pouvoir donner un nom plus court ou pr f r la place du nom officiel d une commande ou bien de d finir une nouvelle commande en combinant des commandes plus l mentaires EXEMPLES alias x next alias nls locus 10000 next REMARQUES e Les d finitions ou aides contenant des blancs ou points virgule doivent tre parenth s es e Donner une d finition vide au moyen de efface un alias e Alias ne sert qu d finir des commandes ce n est pas un m canisme g n ral de d finition de macros eof tous ports SYNTAXE
104. comme ga cc puisque ce dernier figure dans L xx est compris comme zz xx puisqu aucun identificateur complet de L n a xx pour forme abr g e Venons en aux d tails pratiques de la d finition des contextes de lecture et criture dans les programmes Prolog II ProloglA 179 L environnement set_context rom suite_explicite suite_implicite pr fixe_par_d faut Cette commande permet la fois de d finir un contexte en lui associant un nom et de l installer comme contexte courant de lecture et criture e nom est un identificateur ou une cha ne il sert de nom au contexte nouvellement d fini e suite_explicite est une liste de la forme l prefixe listes prefixen lister prefixen listen 1 qui repr sente une suite d identificateurs complets factoris s par familles Par exemple la liste m1 I qa A bb ne m2 CC Le m3 dd g ee gA ff 1 repr sente en fait la liste d identificateurs complets ml aa ml bb m2 cc m3 dd m3 ee m3 ff e liste_implicite est une liste de pr fixes donn s sous forme de cha nes de caract res Chacun de ces pr fixes repr sente la partie ferm e de la famille correspondante ou si la fermeture n a pas t r alis e la totalit de cette famille Dans ces conditions la liste L d identificateurs d finie par tous ces l ments est la concat nation dans l ordre o elles apparaissent de la suite_explicite et des listes d identificateurs d f
105. consacr aux contraintes num riques retard es 4 Contraintes retard es Maintenant que le principe du retardement de l ex cution d un but est d fini examinons comment Prolog II retarde certaines contraintes qui ne r pondent pas aux restrictions impos es par le langage C est le cas e des contraintes de taille pour lesquelles cette taille n est pas explicitement connue e des contraintes faisant intervenir une concat nation pour laquelle la taille de l op rande de gauche n est pas connue e des contraintes num riques non lin aires c est dire faisant intervenir des produits de variables ou des divisions par une variable On essayera de ne pas perdre de vue que les contraintes qui ne respectent pas les restrictions de base de Prolog III sortent du cadre formel et ne devraient en toute rigueur figurer dans un programme Le souci de faciliter la t che du programmeur a conduit admettre l criture de telles contraintes et en d finir un traitement appropri Dans ces trois cas Prolog III automatise un certain type de retardement que nous allons exposer maintenant Tailles retard es On sait voir chapitre Arbres tuples listes et cha nes que dans une contrainte de taille celle ci doit tre explicitement connue c est dire figurer sous la forme d une constante enti re positive On sait galement que la r gle pr d finie bound_size U N permet de poser une telle contrainte au cours de l ex
106. contentera pas de cela la solubilit tant acquise les valeurs qu on doit affecter aux variables du syst me de contraintes ou certaines de ces variables pour le transformer en un ensemble de conditions vraies nous int ressent beaucoup l obtention de ces valeurs tait souvent le but principal du programme en question Par exemple le syst me de contraintes P gt 0 L gt 0 P L 16 2P 4L 44 est soluble lui aussi puisque l affectation P 10 1 6 ProloglA 57 Concepts de base le transforme en un ensemble de conditions vraies Mais celle ci est main tenant l unique affectation ayant cette propri t les valeurs qui y figurent constituent donc la solution unique du syst me ce qui sans doute int resse beaucoup l auteur de ce programme Les contraintes sont crites avec des relations partielles et des termes qui eux m mes sont construits l aide d op rations partielles Lorsqu on consid re une affectation qui transforme une contrainte en une condition sur des arbres avant de pouvoir se demander si la condition est satisfaite il faut d j que les arbres qui y figureront soient bien d finis Pour cette raison les contraintes de Prolog III imposent g n ralement aux variables qui y figurent bien plus de limitations que celles qu exprime au premier chef la relation qui chapeaute la contrainte Par exemple la contrainte fait intervenir l op ration unaire qui n est d finie qu
107. cut avec succ s et diminue lorsque l appel choue Niveau d un appel 1 A moins que des contraintes retard es ne figurent dans la requ te 2006 ProloglA Bolig Outils de mise au point Le niveau d un appel correspond au niveau d imbrication des boites et v rifie donc les deux conditions e Tous les buts de la question sont au niveau 1 e Tous les sous buts imm diats d un corps de r gle sont au m me niveau lequel est sup rieur d une unit au niveau de l appel de cette r gle 4 Les commandes du d buggeur 1 Le langage de commande Voici en quelques points la description du langage de commande du d buggeur Prolog II e Une commande est une suite de un ou plusieurs mots termin e par une fin de ligne ou un point virgule e Les mots de cette suite sont s par s par des espaces ou tabulations e Le premier mot est le nom de la commande les mots suivants tant ses arguments e Les mots qui doivent contenir des blancs ou des tabulations doivent tre parenth s s e Les noms de commandes doivent respecter les majuscules et minuscules e Par d faut une ligne vide ne contenant que des blancs et retour chariot signale l ex cution de la ligne pr c demment fourni au d buggeur on peut d sactiver cette option nomm e nlrepeat par la commande DBG set nlrepeat 0 e Un m canisme d alias permet de d finir de nouvelles commandes en combinant des commandes plus
108. d taill e Les boites de ce mod le comportent en g n ral 4 ouvertures appel es portes mais un nombre de portes plus lev est accessible l utilisateur Prolog II et sont d crites plus loin CALL EXIT FAIL amp REDO fig 1 Une boite opaque et ses quatre portes Ces portes correspondent des endroits pr cis de l ex cution d un but Elles sch matisent e l activation d un paquet de r gles CALL e la terminaison correcte d une des r gles du paquet EXIT e le retour au sein de ce paquet par backtracking REDO e la d sactivation de ce paquet par puisement de ses choix FAIL 2004 ProloglA Doley Bolig Outils de mise au point Voici un exemple d ex cution dans lequel ce qui est en gras doit tre tap par le programmeur On ins re deux petites r gles puis on se place en mode d bug et on lance le but toto x Le d buggeur attend une r ponse la fin de chacune des lignes affichant le prompt DBe On se contentera pour l instant de taper la lettre s signifiant step on avance pas pas gt toto 10 gt gt toto 11 gt gt debug 0 gt toto x 1 1 CALL toto x DBG s 1 1 EXIT r1 toto 10 DBG s 0 0 EXIT r1 query DBG s x 10 0 0 REDO r1 query DBG s 1 1 REDO r1 toto x DBG s 1 1 EXIT r2 toto 11 DBG s 0 0 EXIT r1 query DBG s x 11 gt fig 2 Dans l
109. d interpr tation en logique propositionnelle De mani re globale on pourra consid rer qu on affecte toutes les variables de V une valeur dans IDE Une affectation bool enne est un ensemble X x a4 X a o toute variable bool enne x est associ e une valeur a prise dans l ensemble 0 1 ProloglA 125 Les contraintes bool ennes A partir de ces affectations on peut d finir la valeur d une expression bool enne pour une affectation X de la mani re suivante Soient v une variable de V f et g deux expressions bool ennes alors 0 X 0 e 1 X 1 v X 1 si v 1 E X v X 0 si v 0 E X e fIX 0 sifIX 1 fIX 1 sinon e flg X 0 sif X 0 et g X 0 lg X 1 sinon e f amp g X 1 si f IX 1 et g X 1 f amp g X 0 sinon e f gt 89 X 0 si fIX 1 et g X 1 f lt gt g X 0 sinon F lt gt 9 X 1 si fIX g X f lt gt g X 0 sinon Ces valeurs correspondent bien s r celles donn es par les tables de v rit habituelles pour les op rations concern es Solution d un ensemble de contraintes bool ennes Une affectation bool enne est solution d un ensemble de contraintes si et seulement si toutes les contraintes de cet ensemble sont v rifi es lorsque l on a remplac les expressions qui y figurent par leurs valeurs pour cette affectation Dans le m me esprit un syst me de contraintes bool ennes est soluble s il admet
110. d unit s d entr e sortie ce sont les unit s qui ont t pr c demment ouvertes et qui n ont pas encore t ferm es Les descripteurs de ces unit s sont rang s dans une pile l unit qui est au sommet s appelle l unit courante Toutes les op rations d entr e sortie s effectuent sur l unit courante Au lancement une unit d entr e appel e console et une unit de sortie appel e galement console sont ouvertes automatiquement par le syst me et sont les unit s courantes habituellement ces unit s sont associ es au clavier et l cran de l ordinateur ou du terminal depuis lequel Prolog a t lanc ProloglA 191 L environnement Changer d unit c est dire ex cuter les primitives input f ou output f ne ferme pas l unit courante ni ne change son tat mais ouvre si n cessaire une nouvelle unit et la met au sommet de la pile au dessus de la pr c dente unit courante de fa on pouvoir restaurer cette derni re lors de la fermeture de la nouvelle unit courante Entr es in_char Lecture d un caract re Lit le prochain caract re le transforme en une cha ne de longueur 1 et essaie de l unifier avec t Exemple gt in char cl in char c2 in char c3 ABC t SNIA ee Nea OBS gt Dans cet exemple le caract re obtenu lors de la premi re lecture est en r alit le caract re fin de ligne qui terminait la ligne de commande in_term
111. de charger le fichier menu p3 en tapant gt input menu p3 gt gt gt gt gt gt gt gt gt gt gt gt Erreur 17 Fin de fichier inattendue gt 8 ProloglA Bolig D buter avec Prolog III Le but input menu p3 impose que l entr e courante bascule sur le fichier menu p3 Les commandes y sont lues tour tour ex cut s s il s agit de requ tes cod es en m moire si ce sont des r gles Lorsque le fichier d entr e est puis le message Erreur 17 Fin de fichier inattendue appara t et l entr e courante bascule sur l entr e pr c dente qui en l occurrence est le clavier Le message d erreur n aurait pas t affich si la fin du fichier en question on avait trouv le but close_input On peut visualiser les r gles ins r es par gt list RepasLeger h p d gt HorsDoeuvre h i Plat p Jj Dessert d k k i i 10 gt 0 V Il J V Il Fu H vV Il HorsDoeuvre radis 1l gt HorsDoeuvre pate 6 gt Plat p i gt Viande p i Plat p i gt Poisson p i Dessert fruit 2 gt Dessert glace 6 gt Viande boeuf 5 gt Viande porc 7 gt Poisson sole 2 gt Poisson thon 4 gt gt Remarquons tout d abord que ces r gles ne sont pas tout fait identiques celles qui se trouvent dans le fichier menu p3 Peu importe elles leur sont quiva
112. de la liste et constitue une colonne d l ments dispos s les uns au dessus des autres et align s sur leur c t gauche 502 ProloglA Bolig Primitives graphiques ccol 1 D crit une colonne centr e verticalement dont le contenu est d crit par la liste l roW 1 D crit une rang e horizontale d crite par la liste de primitive s l et dont les l ments sont align s sur leur bord sup rieur si est une liste la primitive calcule la taille de chaque l ment de la liste et constitue une rang e d l ments dispos s c te c te et align s sur leur bord sup rieur crow l D crit une rang e d objets d crits par l et centr s horizontalement c est dire dispos s de mani re ce que leurs points m dians soient tous align s sur une m me horizontale vfill n D crit un espacement vertical de n pixels o n est un entier hfill n D crit un espacement horizontal de n pixels o n est un entier La primitive de groupement suivante permet de g rer l activation ou la d sactivation de zones enti res pendant la saisie du dialogue group identificateur valeur DescriptionDesltems Permet d associer un identificateur un ensemble d items regroup s g ographiquement et s mantiquement valeur indique si le groupe est actif ou non 0 pour inactif 1 pour actif Lorsque le groupe est inactif il est dessin en gris et l tat de ses items ne peut tre modifi
113. de mise au point de programmes ces derniers sous forme de cahiers s par s Le manuel de r f rence Notre intention lors de la r daction de ce manuel a t de d offrir au lecteur une approche plusieurs niveaux ces niveaux pouvant diff rer selon chaque lecteur aussi bien par l tat de ses connaissances sur Prolog III que par le contexte d utilisation un instant donn Une premi re prise de contact pose les grands principes de Prolog II au travers de l utilisation de petits exemples Cette prise de contact pourra s effectuer devant le clavier de votre machine favorite Un certain nombre de chapitres forment ensuite ce que l on pourrait avec un soup on de pr tention appeler un cours sur Prolog II On y d taille les concepts la base du langage pour revenir dans le d tail sur les trois principaux aspects les tuples le num rique et les bool ens Le dernier de ces chapitres explicite la notion de retardement Des exemples maillent cette pr sentation g n rale pour en faciliter la compr hension Le manuel se poursuit par une description de tout ce qui est utile pour le programmeur le contr le l environnement les entr es sorties Ensuite on trouvera une liste que nous esp rons compl te et que nous avons voulu alphab tique des primitives de Prolog II tout d abord la liste des primitives communes aux deux syntaxes puis celles propre la syntaxe de type Edimbourg Ces primitives sont pr
114. des param tres new_window s t new_window s t v x1 y1 x2 y2 new_window s t v r Cr e une nouvelle fen tre et une nouvelle unit d entr e sortie de nom s et de type t o s est une cha ne diff rente de celles des unit s existant d j Le nom s est ins r dans le menu Fen tres 466 PrologIA Bulag Bolig Primitives graphiques t est de la forme type ou bien type liste_attributs type d termine le type de la fen tre et donc les op rations pouvant lui tre appliqu es Ses valeurs possibles sont EDIT r cr ation d une fen tre d dition On peut dans cette fen tre crire lire et diter c est dire agir directement sur la fen tre hors primitives d E S Prolog ces fen tres fonctionnent comme des fichiers L criture se fait toujours la fin du texte contenu dans la fen tre GRAPHICS cr ation d une fen tre avec les m mes fonctionnalit s que la fen tre graphic Le but gr_window s permet de la d finir comme unit graphique courante TTY cr ation d une fen tre avec les m mes fonctionnalit s que la fen tre console MODAL cr ation d une fen tre graphique modale Cette fen tre reste au dessus de toutes les autres fen tres et tous les v nements ext rieurs la fen tre sont d sactiv s except l interruption utilisateur Les v nements ext rieurs la fen tre sont r activ s lorsque la fen tre est
115. dicat conc3 delayed conc2 U V W gt freeze U delayed_conc U V W size U N size V M size W N M Le pr dicat delayed_conc est le m me que celui pr sent plus haut Ainsi toute contrainte du type W U V o la taille de U n est pas connue est remplac e avant le traitement du premier litt ral de la r gle contenant cette contrainte par l appel d un pr dicat quivalent delayed_conc2 U V W 154 ProloglA Bola s4 Retardements On peut bien s r s apercevoir que cette mani re de faire ne garantit nullement la compl tude du traitement dans le cas o les restrictions ne sont pas respect es mais constitue bien un palliatif propre viter au programmeur la gestion de ce type de retardement Voici pr sent un certain nombre d exemples de contraintes de concat nation retard e Examinons dans un premier temps des contraintes tr s simples et les r ponses fournies par l interpr teur Nous avons ici le cas le plus g n ral de contrainte retard e faisant intervenir des concat nations La concat nation est retard e et un certain nombre de contraintes de taille ainsi que des contraintes num riques liant ces tailles sont ajout es au syst me courant Il est bon de se souvenir que ces contraintes de taille sont galement retard es gt vez U V M4N vaza lt SG ProloglA 155 Retardements gt U X V X U
116. dition Ce nom ne doit pas comporter de chemin est unifi avec le nom avec chemin valid par l utilisateur le fichier n est ni cr ni ouvert La r gle choue si le bouton Annuler est press 516 ProloglA Bulag Bolig Primitives graphiques Index des primitives graphiques button 501 button2 501 buttonD 502 cb 500 ccol 504 clipRect 476 col 504 crow 504 editf 501 erase 475 476 477 eraseOval 475 eraseRect 475 eraseRoundRect 475 frame 475 476 frameOval 475 frameRect 475 frameRoundRect 475 glist 502 group 505 hfill 505 invert 475 476 477 invertOval 475 invertRect 475 invertRoundRect 475 paint 475 476 477 paintOval 475 paintRect 475 paintRoundRect 475 rb 500 rb1 501 row 504 text 500 userltem 503 vfill 504 activate_button 515 add_stdmenu 497 apple 497 bitmap de rafra chissement 468 bo te cocher 500 bouton 485 501 bouton de terminaison 502 check_item 496 clear_menubar 497 clear_window 472 clic 480 486 490 491 504 510 cochage d un item 496 command_menu 496 console 464 control 497 coordonn es horizontales 473 coordonn es verticales 473 crayon 474 481 482 create_button 515 create_windotw 471 deactivate_button 515 dialogue de saisie de nom de fichier 516 dialogue de s lection d un fichier 516 DISTANCE 468 EDIT 467 edit 497 enable menu 496 espacement horizontal 505 e
117. domaine muni d une v ritable op ration de concat nation Les cha nes de caract res sont d autre part un sous ensemble des tuples Enfin pour des raisons de compatibilit et d efficacit les listes classiques de Prolog ont t conserv es Ce chapitre pr sente les op rations et les relations d finies sur les arbres et les tuples ainsi qu un certain nombre d exemples utilisant des contraintes sur ces domaines D cembre 1990 Pr ologlA Arbres tuples cha nes et listes 1 Introduction Prolog II am liore sensiblement le traitement des arbres en introduisant un op rateur qui autorise la repr sentation d un arbre de mani re totalement g n rique ind pendamment de son arit En ce qui concerne les listes structures de donn es de base des programmes Prolog l am lioration apport e par Prolog III est fondamentale et introduit un nouvel objet le tuple Cette volution r pond un double constat Tout d abord la structure m me de liste un arbre construit partir d un symbole fonctionnel binaire rend l op ration de concat nation tr s on reuse Ensuite tout acc s au n i me l ment d une liste y compris lors d une concat nation programm e en Prolog ne peut tre effectu qu au travers d un parcours s quentiel Ces deux inconv nients sont supprim s gr ce l introduction de contraintes sur les tuples munis d une concat nation dont les propri t s r pondent ce qu
118. ele nIbin ds tt Les sorties y compris la visualisation des contraintes associ es aux r gles cod es par l interpr teur sont affich es sous forme de clauses en respectant les conventions suivantes 124 PrologiA Bulag Bolig Les contraintes bool ennes e Si tous les litt raux sont positifs de la forme l on crit Liht diet e Si tous les litt raux sont n gatifs de la forme l on crit l amp l amp amp l 0 e Si certains litt raux sont n gatifs de la forme l et d autres positifs forme l f on crit l amp amp l gt l l l Pour visualiser la mise sous forme clausale on peut examiner la requ te et la r ponse suivantes gt a lt gt b 1 a gt b b gt a L interpr teur analyse l ensemble de contraintes initial le code sous forme clausale en v rifie la solubilit et l imprime sous sa forme cod e apr s l avoir simplifi Nous tudierons dans les tout prochains sous chapitres ces notions de solubilit et de simplification Voici d autres exemples de mise sous forme normale conjonctive d ensembles de contraintes que vous pouvez galement tester sur votre in terpr teur as b ce amp d 1 devient alc 1 d gt a b gt c b amp d 0 e alb c c Iboolt c 0 a amp c 0 b amp c 0 alb c 1 Affectations bool ennes Voici une d finition de l affectation bool enne que l on pourra rapprocher de la notion
119. en dire autant au sujet d une contrainte portant sur des termes sans variable puisque de tels termes repr sentent sans ambigu t des arbres uniques Il nous reste d finir ce que signifie tre v rifi e pour une contrainte portant sur des termes avec des variables 56 ProloglA Bolig Bolig Concepts de base Nous avons expliqu comment une affectation de l ensemble des variables permet de transformer un terme en un arbre appliqu chacun des termes qui y figurent le m me proc d permet de transformer une contrainte sur des termes en une condition sur des arbres Un syst me de contraintes sera dit v rifiable ou plut t soluble s il existe au moins une affectation des variables apparaissant dans le syst me par laquelle ce dernier se transforme en un ensemble de conditions vraies sur des arbres L affectation en question s appelle une solution du syst me de contraintes Par exemple le syst me de contraintes P 0L 0 P L 16 est soluble puisque parmi d autres l affectation P e 8 1 8 le transforme dans l ensemble de conditions 8 gt 0 8 0 8 8 16 Parlant famili rement nous dirons que o qu elles apparaissent dans un programme Prolog II les contraintes demandent tre v rifi es Une grande partie du travail de la machine Prolog II sera de veiller ce que le syst me de toutes les contraintes prises en consid ration soit constamment soluble Mais on ne se
120. est nul ou non le pr dicat creer est imm diatement ex cut l appel gt creer Til T2 U T1 E X E X freeze creer E X T2 U Les variables interm diaires cr es par Prolog III ont t renomm es par souci de lisibilit Ici le premier param tre n est pas connu l appel et ne sera jamais connu jusqu la fin de l ex cution de la requ te En sortie Prolog III rappelle que la variable T1 mise sous forme normale l aide du constructeur g n ral d arbres sous la forme E X demeure dans un tat gel et rappelle quel est le pr dicat retard sur cette variable On peut compliquer un peu cet exemple et s int resser aux deux pr dicats suivants e creer_et T1 T2 U qui retarde la cr ation du tuple lt T1 T2 gt jusqu ce que les deux termes T1 et T2 soient connus e creer_ou T1 T2 U qui retarde la cr ation du tuple lt T1 T2 gt jusqu ce que l un des deux termes T1 et T2 soit connu Voici ces deux pr dicats creer et Til T2 U gt freeze T1 freeze T2 creer T1 T2 U creer O T1 T2 U gt freeze T1 creer T1 T2 U freeze T2 creer T1 T2 U creer T1 T2 lt T1 T2 gt gt 150 ProloglA Bolig Retardements On remarquera que le pr dicat creer_ou peut s crire d une mani re plus subtile afin d viter que creer ne soit effac deux fois Une fa on de r soudre ce probl me est donn e dans le paragraphe
121. externe 1012 ProloglA Bolig Bolig Utilisation de Prolog IHI sur Macintosh e en correspondance avec les pr c dents un certain nombre d appels des fonctions Convert_MachinP_to_TrucC pour amener aux conventions de C le codage des valeurs des arguments e ensuite l appel d une fonction C crite par vous qui constitue l implan tation effective de la r gle externe e au retour de cette fonction un certain nombre d appels de fonctions de conversion Convert_TrucC_to_MachinP afin de coder les r sultats selon les conventions internes Prolog M e finalement des appels de la fonction PutArg pour donner ces r sultats pour valeurs certains des arguments de la r gle d appel e sans oublier de pr ciser la valeur vraie ou fausse qui doit tre retourn e par la fonction UserRule titre de compte rendu succ s ou chec de l ex cution de la r gle externe Vous trouverez dans les paragraphes suivants plusieurs exemples d implantation de r gles externes Proc dures de transfert de donn es Seuls des entiers des r els et des cha nes de caract res peuvent actuellement tre chang s entre un programme Prolog III et des routines externes crites en C ou un autre langage Deux jeux distincts de proc dures de transfert de donn es sont fournis correspondant deux mani res l g rement diff rentes d organiser le travail PrologIA 1013 Utilisation de Prolog III sur Macintosh
122. externe Prolog M I Cat gorie Gestion des r gles et des identificateurs Param tres connus let N Messages d erreur Identificateur attendu Entier attendu Tableau d j d fini Description D finit dynamiquement un tableau de constantes Prolog de nom I et de taille N Ce tableau se comportera comme une variable globale ult rieurement accessible pendant l effacement de n importe quel but et statique r sistante au backtracking Les valeurs l gales de l indice sont incluses dans 1 N Si un tableau de m me nom existe d j e s il s agit d un tableau de m me taille il ne se passe rien e si les tailles diff rent il se produit une erreur L acc s et l affectation sont analogues ceux des tableaux des autres langages de programmation Le tableau est d sallou lorsqu on tue le module auquel il appartient c d les r gles ayant le m me pr fixe 232 ProloglA A gt 2 L2 L2 a R gles pr d finies et proc dures externes Exemples gt list inc i gt val i x assign i x 1 dec i gt val i x assign i x 1 initialise gt assign pointeur 1l def array pile 100 empile v gt val pointeur p I assign pile p v inc pointeur p lt 100 empile v gt outml d bordement de la pile fail depile v gt dec pointeur val pointeur p I val pile p v dec pointeur p gt 1 depile v gt outml pile vide assign p
123. hauteur du rectangle est calcul e automatiquement en fonction de ce param tre Entier qui repr sentent le nombre de caract res qui doivent tre visible pour un item La largeur du rectangle est calcul e automatiquement en fonction de ce param tre Identificateur servant donner un nom interne au gestionnaire Il est utilis pour donner le r sultat en sortie l_Init Liste de constantes cha nes identificateurs nombres qui repr sente la liste des valeurs initiales Il est possible de proposer une s lection initiale en fournissant pour l_Init un triplet d crivant un tat du gestionnaire Ce triplet doit alors avoir la forme suivante lt Listelnit NoSelectionn s NoHaut gt Le premier argument est une liste de constantes repr sentant la liste des valeurs initiales Le deuxi me argument est la liste ordonn e des num ros d ordre des items composant la s lection initiale Cette liste peut comporter 0 pas de s lection 1 ou plusieurs l ments Le troisi me argument indique le num ro de l item pr senter en haut du rectangle d affichage Ce triplet correspond la repr sentation interne de l tat du gestionnaire Ainsi la paire Identificateur lt Listelnit NoSelectionn s NoHaut gt intervient dans la liste des valeurs transmise aux actions associ es aux boutons La valeur retourn e par ces actions pour d crire un nouvel tat du gestionnaire est galement de cette forme
124. i Transformation r ciproque de la pr c dente doit tre l adresse d un terme Prolog III de type nombre entier Cette fonction d pose dans la variable enti re point e par i la valeur de ce nombre Une erreur se produit si la transformation ne peut pas tre faite La fonction retourne 0 FALSE en cas d erreur une valeur non nulle TRUE autrement Convert_ExtendedC_to_NumP f Convert_DoubleC_to_NumP f Transforme le r el de grande pr cision f en un nombre Prolog III et retourne l adresse du terme ainsi construit ou NULL si la transformation n a pas pu tre faite Dans le premier cas il s agit du type extended flottant sur 80 bits associ la biblioth que SANE dans le second il s agit du type double standard Puisque le C du Macintosh transforme tous les flottants en extended pour l valuation des expressions arithm tiques si on ne regarde que l efficacit ou la pr cision du programme on a int r t travailler avec des extended Si au contraire on tient beaucoup la portabilit alors on pr f rera le type double ProloglA 1017 Utilisation de Prolog III sur Macintosh Convert _NumP_to_ExtendedC t f Convert_NumP_to_DoubleC t f Transformation r ciproque de la pr c dente doit tre l adresse d un terme Prolog III de type nombre Cette fonction d pose dans la variable r elle de grande pr cision point e par f la valeur de ce nombre Une erreur se produit si la transformat
125. insert liste de un lt 1 gt x gt liste de un lt gt gt gt liste_de_un x DEBORDEMENT gt liste_de_un x Bien entendu la bonne solution s obtient en permutant l ordre des deux r gles gt insert liste de un lt gt gt liste de un lt 1 gt x gt 0 gt liste_de_un x x lt gt liste de un x ProloglA 163 L environnement x lt 1 gt lt 1 1 gt x lt 1 1 1 gt K Il INTERRUPTION UTILISATEUR La coupure cut Normalement Prolog III essaye d ex cuter une suite de buts de toutes les mani res possibles Mais si on utilise une r gle contenant un ou coupurel pour ex cuter un but q l ex cution de ce supprimera tous les choix de r gles restant faire pour l ex cution de q Cela restreint la taille de l espace de recherche on peut dire que fait oublier les autres mani res possibles d ex cuter q Le est un parasite qui ne peut appara tre que parmi les termes qui constituent le membre droit d une r gle Les choix qui restent examiner et que l effacement du supprime sont e les autres r gles ayant la m me t te que celle o le figure e les autres r gles qui auraient pu tre utilis es pour effacer les termes compris entre le d but de la queue et le Cette question est illustr e par les exemples suivants gt list couleur rouge gt couleur
126. l emploi de assign et val fait ci dessus est quivalent ProloglA 209 2 gens 2 Bol R gles pr d finies et proc dures externes L retract nom fichier x 1 assert nom fichier monfichier txt 1 nom fichier x x monfichier txt assign tab N T Fonction affectation d un l ment d un tableau Classe R gle pr d finie Prolog MI I Cat gorie Contr le Param tres connus tab N et T Messages d erreur Entier attendu Tableau d j d fini Tableau non d fini D bordement de tableau Description Affecte la valeur de T l l ment de rang N du tableau fab Ce tableau doit avoir t d fini au pr alable avec def_array Les m mes restrictions que pr c demment s appliquent T ce doit tre une constante Voir galement e val e def_array undef_array redef_array 210 ProloglA Bolig R gles pr d finies et proc dures externes block E C B block_exit E C Fonction Abandon d effacement R cup ration d erreurs Classe R gle pr d finie Prolog MI Cat gorie Contr le Param tres connus B Messages d erreur Block ind fini Description La r gle pr d finie block permet de terminer brutalement l effacement d un but ou d une liste de buts B Cette primitive est essentiellement utilis e pour la r cup ration des erreurs ou le contr le de programme On peut consid rer que e
127. la contrainte R m Echoue lorsque R est born sup rieurement sans que le maximum puisse tre atteint par R Provoque une erreur lorsque R ne peut tre typ num rique Erreur 60 ou encore lorsque l expression num rique R n est pas born e sup rieurement Erreur 59 Exemples X lt 2 Y lt 3 gt maximize R Err 59 Expression non bornee lors d un calcul d extremum gt maximize R R numt R 2 Err 60 Argument de mauvais type pour un calcul d extremum gt maximize R R 2X Y X lt 2 Y lt 3 gt Remarque On pourra utiliser la primitive block pour la r cup ration des erreurs Voir galement e minimize maximum minimum lower_bound upper_bound 295 mxxxvi ProloglA A gt Ed L2 gt s L a R gles pr d finies et proc dures externes minimum R1 R2 Fonction Minimum d une expression num rique Classe R gle pr d finie Prolog III Cat gorie Contraintes num riques Param tres connus R1 Messages d erreur Expression non born e Erreur 59 Arguments de mauvais type Erreur 60 Description Calcule le minimum m de R1 et ajoute au syst me de contraintes courant la contrainte R2 m Echoue lorsque R1 est born inf rieurement sans pour autant avoir un minimum la borne inf rieure ne peut tre atteinte par R1 Provoque une erreur lorsque R1 ne peut tre typ num rique Erreur 60 ou encore lorsque l expression num rique R1 n est
128. la pr cision et l tendue des nombres flottants sont d termin s par les particularit s de votre machine Leur syntaxe co ncide avec celle utilis e dans la plupart des langages qui connais sent ce type de donn es num riques Elle est donn e en d tail au chapitre Les syntaxes de Prolog IT 26 ProloglA Bolig Concepts de base Le tuple vide Le double signe lt gt est un symbole conventionnel destin servir d tiquette aux arbres qui d un point de vue s mantique n en ont pas Ces arbres se r duisent donc la suite de leurs fils ils implantent en Prolog IMI la notion de suite finie d arbres qu on appelle des tuples Comme nous le verrons les tuples se notent lt a1 an gt le tuple vide se note donc tout naturellement lt gt Ceci justifie le nom donn ce signe Les cha nes de caract res La notation courante des cha nes de caract res l aide de guillemets Et oui est en r alit une deuxi me notation pour l arbre En Prolog III une cha ne de caract res est toujours structur e puisque c est un tuple de caract res Les cha nes ne sont des entit s atomiques qu en tant qu objets syntaxiques et encore la condition d utiliser la notation des constantes cha nes Et oui Cas particulier le tuple vide et la cha ne vide sont la m me chose les deux notations et lt gt sont donc quivalentes ProloglA 27 Concepts de base 3 Op rations
129. la syntaxe de base et tir e en grande partie de celle de Prolog II et que son style est empreint de notations math matiques La syntaxe Edimbourg est plus r pandue dans le monde travers ses dialectes En voici un de plus tendu bien s r aux fonctionnalit s de Prolog II 424 PrologilA Bulag Bolig Syntaxes Bien que ces deux syntaxes puissent para tre tr s diff rentes au moins par leur pr sentation et leur esprit un travail important de mise en commun a t r alis permettant pour un programme Prolog III donn une traduction tr s ais e d une syntaxe vers l autre Il tait indispensable qu un lecteur habitu la syntaxe Edimbourg ne soit pas p nalis voire induit en erreur par ses habitudes syntaxiques Passons aux points communs et diff rences On peut noter comme point commun le jeu de caract res en premi re approximation mais surtout l ensemble des constantes aux identificateurs pr s Il existe toutefois une syntaxe commune d identificateur dite d identificateur quot malheu reusement peu lisible Les variables ont des syntaxes distinctes mais l encore il existe une forme commune dite de variable underlinel Insistons sur le fait qu il existe des moyens de se passer de ces formes alternatives car les deux syntaxes de variables ont une intersection non vide et qu il en va de m me pour les identificateurs Les termes sous notation fonctionnelle ain
130. le terme T sur l unit courante de sortie sans les contraintes associ es aux variables qui peuvent figurer dans ce terme writeq se comporte comme la primitive out Actuellement writeq ne tient pas compte des d clarations d op rateurs et emploie la notation fonctionnelle Exemple writeq x HET writeq chaine chaine writeq a xX 1 2X str a xX 2X 1 str Voir galement o out outm write PrologiA 409 Bulag R gles pr d finies Edimbourg X Y Fonction Eclatement de termes Classe Primitive Edimbourg Cat gorie Arbres listes et tuples Param tres connus X ou Messages d erreur Non Description Si l arit de X est connue Y est unifi avec une liste dont le premier l ment est l tiquette de X et les l ments suivants les ventuels arguments dans l ordre Sinon X est d arit inconnue et Y doit tre une liste et non pas une paire point e dont le premier l ment est atomique c est dire une feuille X est alors unifi avec le terme construit ayant le premier l ment de la liste comme foncteur et les autres l ments comme arguments Echoue donc si X est d arit inconnue et Y n est pas une liste ou bien si X et Y sont libre var Exemples out X a Y lout x al X toto 1 2 3 X totol lt 1 2 3 gt X toto 1 2 3 label U label 1 2 R Voir galement e functor 410
131. les deux commandes suivantes asserta conc E X Y E Z conc X Y Z asserta conc Y Y tap es dans cet ordre ont pour effet l ajout du programme conc Y Y conc E X Y E Z conc X Y Z Toutes les remarques concernant assertz sont valables ici 380 ProloglA Bolig R gles pr d finies Edimbourg atom T Fonction V rifie que T est un identificateur connu Classe Primitive Edimbourg Cat gorie V rification de types Param tres connus Aucun Messages d erreur Non Description V rifie que T est un identificateur connu Echoue sinon atom T se comporte comme le but ident T ProloglA 381 R gles pr d finies Edimbourg atomic T Fonction V rifie que T est un atome Classe Primitive Edimbourg Cat gorie V rification de types Param tres connus Aucun Messages d erreur Non Description V rifie que T est un atome connu c est dire v rifie d une part que T est connu et que d autre part T est un nombre ou un identificateur ou un bool en ou un caract re ou bien le tuple vide lt gt Echoue dans tous les autres cas Notons qu une cha ne de caract re n est pas un atome puisqu on peut la d couper en caract res Voir galement e bound known 382 ProloglA Bulag Bolig R gles pr d finies Edimbourg call P Fonction Effacement d un but Classe Primitive Edimbourg Cat gorie
132. manipulent Ajout suppression et recherche de r gles assert f q asserta f q Ajout d une r gle au d but de son paquet t doit tre un terme pouvant tre une t te de r gle c est dire un terme qui repr sente un arbre dont le n ud initial comporte une tiquette connue qui est un identificateur q doit tre une liste de termes La r gle effectivement ajout e par ces primitives comporte un syst me vide de contraintes L ex cution de assert t q1 qn 1 ajoute la r gle t gt q1 qn L au dessus du groupe de r gles ayant le m me nom que t c est dire au d but du paquet correspondant t et si aucun groupe de r gles n a le m me nom que t un nouveau paquet est cr Par exemple les deux commandes suivantes ProloglA 185 Doli L environnement 4 assert conc lel xl y lelzl conc x y z 1l assert conc I l y y 1 1 tap es dans cet ordre ont pour effet l ajout du programme conc I l y y gt conc lelx l y le z l gt conc x y 2 assert t q assertz t q Ajout d une r gle la fin de son paquet M me fonctionnement que assert mais l ajout se fait au dessous et non au dessus du paquet correspondant t Exemple les deux commandes suivantes dans l ordre indiqu produisent l insertion du m me programme conc que ci dessus assert conc y y assert conc lelxl y lel zl conc x y z 1l current_predicate lt i a gt Perm
133. ments d information et de mises en garde leur sujet Identificateurs pomme 1 pomme 2 nb fils 3 Paul Hochon 4 zZ44a 45b c46 5 Il s agit d identificateurs corrects pour la syntaxe marseillaise On notera que pour la syntaxe d Edimbourg expliqu e au chapitre Les syntaxes de Prolog II notre exemple 4 n est pas un identificateur mais une variable car il commence par une lettre majuscule 38 ProloglA Bulag Prelog Concepts de base Identificateurs incorrects1 t_iti 1 i m_happy 2 nb freres 3 l1dou 4 Les exemples 1 et 2 ne sont pas des identificateurs car leur deuxi me caract re n est pas une lettre ce sont des noms de variables corrects Les deux exemples suivants 3 et 4 sont ill gaux le signe moins n est pas permis l int rieur d un mot un identificateur ne peut pas commencer par un chiffre Entiers 2500 1 815915283247897734345611269596115894272000000 2 012 3 00 4 Entiers incorrects 2 500 1 8 0 2 0 3 La premi re expression ne d finit pas un entier mais deux entiers s par s par un blanc Les deux expressions suivantes d finissent des nombres flottants l gitimes mais non des entiers corrects 1 Il faudrait dire des expressions qui ne sont pas des identificateurs corrects bien sur ProloglA 39 Concepts de base Prelog Flottants 1 e6 1 5e6 2 31 4e 1 3 4 4 666 5 Ces expressions d fin
134. nombre de valeurs num rer On examinera comme exemple le cryptarithme SEND MORE MONEY Attention toutefois l ordre d num ration des variables des carts de performances normes pouvant en d couler En r gle g n rale on choisira d num rer d abord les variables les plus contraintes Si les contraintes sont identiques on choisira d abord celles dont les coefficients sont les plus lev s ou encore celles qui interviennent le plus souvent dans le syst me de contraintes plus avant dans ce chapitre 104 PrologIA Bulag Bolig Les contraintes num riques max value R1 R2 min value R1 R2 Cette proc dure externe deux arguments calcule la valeur du maximum respectivement du minimum d une expression num rique R1 Si on veut tre plus pr cis la valeur qui est calcul e est en fait le plus petit des majorants respectivement le plus grand des minorant dans le cas de max_value respectivement de min_value Ceci implique que le maximum respectivement le minimum calcul n est pas forc ment atteint ce calcul ne tenant pas compte des contraintes d in galit s de type et des contraintes d in galit s strictes lt gt particular value Rl R2 Pose la contrainte R2 R1 o R1 est une valeur quelconque du terme R1 qui satisfait l ensemble de contraintes courant Pour les remarques diverses concernant cette primitive se reporter au chapitre r gles pr d finies et
135. nous l avons dit nous ne ferons pas de distinction entre une constante et le terme qui la repr sente Il ne suffit pas d tre une feuille pour tre une constante un arbre r duit un unique nombre fractionnaire comme 755 10 est une feuille mais il ne poss de pas de nom sp cifique et il ne peut tre exprim qu travers la division dont il est le r sultat Bien entendu 151 2 est une autre mani re de sp cifier le m me nombre rationnel Inversement toutes les constantes ne repr sentent pas n cessairement des feuilles Ainsi une suite de caract res comme PrologIA 23 Concepts de base n est certainement pas atomique cependant Prolog II la consid rera com me une constante d s lors que l on utilisera la notation particuli re des cha nes Dupont Bien entendu vous pouvez repr senter le m me arbre par le terme lt D u p o n t gt Les constantes connues sont Les identificateurs Les identificateurs sont les constantes symboliques comme pierre repas leger calcul12 Un identificateur est une suite de lettres de chiffres et des deux caract res apostrophe et blanc soulign _ qui n a pas la syntaxe d un nom de variable c est dire qui commence par au moins deux lettres Une description plus pr cise de la syntaxe des identificateurs est donn e au chapitre Les syntaxes de Prolog III En r alit la syntaxe des identificateurs est bien plus complexe que ce
136. ou de red finir de tels menus L activation d un menu fugitif se fait soit en appuyant sur le bouton droit de la souris l int rieur de la fen tre concern e lorsque la souris comporte plusieurs boutons soit en appuyant simultan ment une touche option et le bouton de la souris si la souris ne poss de qu un seul bouton set menu u c v Permet de d finir ou de red finir par v la valeur de l item indiqu par c dans le menu de l unit u u unit Repr sente l unit concern e l entier 0 pour la barre de menu et ses descendants le nom d une fen tre sinon c chemin Liste binaire de cha nes indiquant un chemin de s lection dans le menu hi rarchique de l unit u L l ment terminal de ce chemin est remplac par v Si une telle hi rarchie n existe pas elle est cr e Si la liste est c est tout le menu qui est concern v valeur Arbre de description de la nouvelle valeur Celle ci peut tre soit une feuille soit une hi rarchie Valeur de type feuille Une feuille est repr sent e par un tuple de la forme lt Nom item Identificateur n gt La cha ne Nom item donne le nom de l item 492 ProloglA Bolig Bolig Primitives graphiques Identificateur est le nom d une r gle Prolog d arit 1 attach e l item n est un entier 0 ou 1 qui indique si l item est ou non coch une marque pr c de le nom de l item coch Lorsqu un item d un menu est s lectionn et valid
137. pas born e inf rieurement Erreur 59 Exemples gt minimum R R R 2X Y X gt 2 Y gt 3 PIR 207 ANUS gt maximum R R R 2X Y X gt 2 Err 59 Expression non bornee lors d un calcul d extremum gt maximum R R R Z2X Y X gt 2 Y gt 3 gt Remarque On pourra utiliser la primitive block pour la r cup ration des erreurs Voir galement e maximum lower_bound upper_bound maximize minimize ProloglA 295 v Ed L a La Ed ANA R gles pr d finies et proc dures externes n minimize R Fonction Minimiser une expression num rique Classe R gle pr d finie Prolog III Cat gorie Contraintes num riques Param tres connus R Messages d erreur Expression non born e Erreur 59 Argument de mauvais type Erreur 60 Description Equivalent mais en plus performant minimum R R Calcule le minimum m de R et ajoute au syst me de contraintes courant la contrainte R m Echoue lorsque R est born inf rieurement sans que le minimum puisse tre atteint par R Provoque une erreur lorsque R ne peut tre typ num rique Erreur 60 ou encore lorsque l expression num rique R n est pas born e inf rieurement Erreur 59 Exemples X gt 2 Y gt 3 gt minimize R Err 59 Expression non bornee lors d un calcul d extremum gt minimize R R numt R 2 Err 60 Argument de mauvais type pour un calcul d extremum gt minim
138. pr fixages Exemples name 12345678 L L 49 50 51 52 53 54 55 56 name X 97 98 99 X abc name X 65 661 1 codes Ascii de A et de B Erreur Ce n est pas un identificateur Voir galement e string_ident string_integer string_real string_bool 392 ProloglA Bolig R gles pr d finies Edimbourg nl Fonction Imprime un retour chariot sur la sortie courante Classe Primitive Edimbourg Cat gorie Entr es Sorties Param tres connus Aucun Messages d erreur Non Description Ecrit un retour chariot sur l unit de sortie courante Se comporte comme la primitive line Voir galement o line outl outml PrologIA 393 Bulag R gles pr d finies Edimbourg nonvar T Fonction V rifie que T a une tiquette connue ou une liste de fils connue Classe Primitive Edimbourg Cat gorie Contr le Param tres connus Aucun Messages d erreur Non Description nonvar T se comporte comme not free T c est dire que nonvar r ussi si l tiquette de T est connue ou bien si on sait si la liste des fils est vide ou pas Echoue dans les autres cas L appel nonvar T r ussit quand var T choue et vice versa Voir galement e free known bound var 394 ProloglA Bolig R gles pr d finies Edimbourg number R Fonction V rifie que R est un nombre connu Classe Primitive Edimbourg Ca
139. proc dures externes insert Fonction Insertion de r gles partir de l unit courante Classe Proc dure externe Prolog M II Cat gorie Entr es sorties Param tres connus Aucun Messages d erreur Erreur de syntaxe Paquet d j existant Fin de fichier inattendue Description Cette r gle pr d finie fait basculer le syst me dans un mode pour lequel les r gles lues sur l unit d entr e courante sont ajout es au programme en cours dans l ordre dans lequel elles sont lues Les requ tes rencontr es sont ignor es Le mode insert se termine soit quand une r gle vide est trouv e soit si l on rencontre la fin du fichier d entr e Exemple gt insert conc l y y gt conc e x y e z gt conc x y z gt Si une erreur de syntaxe est rencontr e un avertissement est affich et un certain nombre de caract res en principe tous les caract res jusqu un ou jusqu la fin de la ligne sur l unit console sont ignor s insert provoque une erreur lorsque un paquet lu existe d j alors que reinsert remplace l ancien paquet par la nouvelle d finition Voir galement o insert F reinsert reinsert F PrologIA 273 2 gens 2 Bol R gles pr d finies et proc dures externes L insert F Fonction Insertion de r gles partir d un fichier Classe Proc dure externe Prolog M I Cat gorie Entr es sorties Param tres connus
140. rendreDistinct B lt gt rendreDistinct B lt B gt C rendreDistinct B C B B remplirZone lt V gt L lt V gt L C C v gt 0 remplirZone lt V gt L L lt B gt C C placerCarre B L L remplirZone L L C C remplirZone lt V B B gt L L C C v lt 0 placerCarre B lt H 0 H gt L L placerCarre B lt H H gt L L B gt H placerCarre B lt H V gt L lt B V gt L B H placerCarre B lt H gt L lt B H B gt L B lt H Une question comment remplir un rectangle de taille inconnue avec 9 carr s diff rents et de tailles inconnues remplirRectangle A C C 9 546 PrologilA Bolig Index coupure 164 418 gt 417 coupure 164 lt 411 lt gt tuple vide 27 412 410 415 lt 411 413 416 gt 411 gt 411 liste vide 33 symbole fonctionnel 83 1420 414 A abandon de l ex cution d un but block_exit 166 abolish 377 abs 172 369 activate_ button 515 add 170 368 add_implicit 183 202 add_stdmenu 497 addition 30 98 affectation 47 affectation assign 173 affectation bool enne 125 ajout d une r gle assert 186 Index apple 497 arbres 20 70 arbres factuels 71 arbres infinis 75 arg 81 203 arg2 84 204 arg3 80 205 arithm tique 14 assert 186 206 378 assert 187
141. restore_menubar 497 retour chariot 486 490 502 511 ProloglA Bolig Primitives graphiques SAVE 468 470 save_menubar 497 save_window 469 set_menu 493 set_window 470 sfgetfile 516 517 sfputfile 517 518 SHAPE 468 souris 480 srcBic 483 srcCopy 483 srcOr 483 srcXor 483 stty 488 style 482 483 497 style_menu 497 tabulation 486 490 504 511 taille de la fonte 472 482 483 484 taille de la police de caract res 468 TTY 467 489 user_item 510 userltem 510 window 497 PrologiA 519 LISE PITA T HERITAGE LISE PITA T HERITAGE Bolig Annexes A Liste des messages d erreur de Prolog III B Liste des r gles pr d finies par cat gories C Quelques programmes Prolog III crits en syntaxe Edimbourg A Liste des messages d erreur de Prolog Ill 1 Debordement de l espace de copie 2 Debordement de l espace de backtracking 3 Debordement de l espace auxiliaire 4 Debordement de l espace auxiliaire 5 Debordement de l espace auxiliaire 6 Debordement de l espace auxiliaire 7 Debordement de l espace auxiliaire 8 Debordement de l espace auxiliaire 9 Debordement de l espace des regles 10 Division par zero 11 Debordement de l espace auxiliaire 12 Reel trop grand 1 13 Reel trop grand 2 14 Reel indefini 1 15 Reel indefini 2 D cembre 1990 Pr ologlA Annexes Bolig 524 16 17 18 19 20 21 22 23 24 25 26 27
142. s d croissantes non et ou quivalent et implique not s respectivement amp lt gt gt Le parenth sage permet de modifier les priorit s Toute expression bool enne repr sente un bool en connu ou pas Voici des exemples d expressions bool ennes correctes X 1 X Y Y X amp X Prolog IA 451 Syntaxes C amp l gt D U3 amp X1 lt gt X3 o Ici encore toute expression bool enne reste une feuille et ne forme donc pas un arbre de profondeur sup rieure z ro Arbres et Termes Sur le plan strictement syntaxique un terme est un couple constitu d une tiquette et d une liste ventuellement vide de fils Un arbre est un terme sans variables Une feuille est un terme sans fils que l on confond avec son tiquette Voici quelques exemples de termes corrects f X Y A B C 4Z Y caractere c caractere c lt 1 2 A B gt 2Z a B C b c B 1 A lt B C lt 1 2 gt El lt a b c gt R le constructeur g n ral d arbre 1 2 3 1 une liste classique On notera que l on a parenth s l tiquette des deux premiers termes Dans le dernier exemple la barre est le s parateur de paire point e et non pas l op ration ou bool en Si on souhaite exprimer la liste contenant l expression bool enne a pB il faut crire t a B au lieu de A B On insistera fortement sur le fait que syntaxiquement correct ne signifie pas s mantiquemen
143. se termine la fin de la ligne courante Q texte commenter commentaire 458 ProloglA Bolig A fs Syntaxes Oop rateurs Edimbourg D autres op rateurs Edimbourg ne servant pas directement Prolog III sont d clar s dans cette syntaxe En voici la liste et ce qui est construit Op rateur Type Pr c dence Construction iS xfx 700 sys is t1 t2 xfx 700 sys t1 t2 xfx 700 sys t1 t2 xfx 700 sys t1 t2 xfx 700 sys t1 t2 gt xfx 700 sys gt t1 t2 z xfx 700 sys t1 t2 Etranget s Le terme x Y provoque une erreur de syntaxe conflit de type en effet ce terme est quivalent x Y qui est l op ration unaire appliqu e au terme x Y lequel ne peut tre num rique Si on souhaite contruire le terme tiquet par et ayant deux arguments X et Y il faut crire X Y Le but suivant sera mal compris par le syst me X is 3 4 En effet le nombre 4 suivit de est compris en tant que nombre flottant et le syst me reste en attente de la suite du but n ayant pas vu le stop Il faut mettre un blanc entre le 4 et le point final L criture des termes avec op rateurs ne se fait pas au mieux dans cette impl mentation Ainsi la notation fonctionnelle est utilis e pour les op rateurs qui ne sont pas ceux manipul s au c ur de Prolog MI out X is 3 4 is X 12 Prolog IA 459
144. sent es raison d une par page et nous avons tent de multiplier partir de chaque entr e les acc s possibles d autres primitives ou m me d autres parties du manuel Le chapitre Syntaxes pr sente ensuite les syntaxes de Prolog II Deux syntaxes sont en effet admises une syntaxe originale proche de Prolog II et une syntaxe anglaise de type Edimbourg Enfin le dernier chapitre Primitives graphiques donne une description d taill e des primitives d environnement qui permettent de g rer aussi bien 2 ProloglA Bulag Bolig du graphique des fen tres ou des menus d roulant que des interruptions souris ou des objets structur s Avant de clore le manuel de r f rence par un certain nombre d index g n raux ou sp cifiques on trouvera trois annexes une premi re concernant la liste des messages d erreur de Prolog II une seconde contenant la liste des r gles pr d finies et enfin une troisi me reprenant les exemples du manuel cette fois ci en syntaxe Edimbourg Le manuel d utilisation La partie manuel d utilisation pr sente les diff rentes sp cificit s de Prolog II sur la machine que vous utilisez On y trouvera galement les informations relatives l installation de Prolog II sur votre machine ainsi qu l ajout de r gles pr d finies ou encore aux appels externes A la fin de ce cahier on donne un r capitulatif des index communs aux manuels de r f rence et d utilisatio
145. solutions correspondantes gt lt 0 gt U U lt 0 gt U 10 U lt 0 0 0 0 0 0 0 0 0 0 gt gt Z 10 lt 1 2 3 gt Z Z lt 2 3 1 gt Z lt 1 2 3 1 2 3 1 2 3 1 gt 78 ProloglA Bulag Arbres tuples cha nes et listes R capitulatif des op rations et relations Pour r capituler voici toutes les op rations et relations utilisables sur les arbres et les tuples Op rations et relations d finies sur les arbres op rations constructeur d arbre Xo X1 Xn constructeur g n ral d arbre xo lt Xx1 1 Xn gt relations galit x y in galit x y taille x n Op rations et relations d finies sur les tuples op rations constructeur de tuple lt Xo Xi 1 Xn gt concat nation u v relations galit u v in galit u v taille u n typage u tuple PrologIA 79 Arbres tuples cha nes et listes 4 R gles pr d finies sur les tuples Les r gles pr d finies qui concernent la taille des tuples se divisent on aura l occasion de le revoir souvent en deux classes les r gles occasionnant un retardement et celles pour lesquelles ce n est pas le cas On retrouvera une description d taill e et des exemples dans le chapitre R gles pr d finies et proc dures externes Tailles et concat nations bound size T N Pose la contrainte T N lorsque n est un
146. souhaitable afin que les conventions d finies par un contexte soient autant que possible hors du temps et qu un identificateur abr g repr sente le m me identificateur complet tout moment d une session Prolog II ainsi que d une session une autre Ceci justifie l introduction de la notion de famille ferm e ou plut t de partie ferm e d une famille des primitives sont fournies close_context_dictionary pour figer un noyau dur de la famille gal l tat de cette derni re au moment ou la fermeture est effectu e Par la suite d autres identificateurs pourront encore tre ajout s la famille mais ils ne seront pas incorpor s la partie ferm e de cette derni re Ce concept sera exploit dans l interpr tation de la liste implicite qui figure dans les primitives de d finition des contextes de lecture et criture cet endroit une r f rence une famille ne d signe que sa partie ferm e Une telle r f rence est donc stable Contexte de lecture et d criture Un contexte de lecture et criture est un ensemble de r gles de transformation d identificateurs abr g s en identificateurs complets et vice versa Elles associent tout identificateur abr g un unique identificateur complet inversement elles d finissent l ensemble des identificateurs qui peuvent s crire sous forme abr g e Le codage interne des identificateurs met toujours en uvre la forme compl te de ceux ci les transf
147. suivies d un retour chariot Une erreur est signal e si une de ces cha nes n est pas connue Voir galement e out outc outl outm 312 ProloglA Bolig R gles pr d finies et proc dures externes output F Fonction D finition de l unit de sortie courante Classe R gle pr d finie Prolog MI Cat gorie Entr es sorties Param tres connus F qui doit tre une cha ne Messages d erreur Non Description L unit dont le nom est F devient l unit de sortie courante Si cette unit ne figure pas parmi les unit s ouvertes alors un fichier ayant le nom F est cr e Sinon cette unit passe au sommet de la pile sauf si elle s y trouvait d j Voir galement e output_is close_output input ProloglA 313 Ed L a La Ed ANA R gles pr d finies et proc dures externes e output_is F Fonction Fournit l unit de sortie courante Classe Proc dure externe Prolog M II Cat gorie Entr es sorties Param tres connus Aucun Messages d erreur Non Description Pose la contrainte F S ou S est une cha ne de caract res d crivant l unit de sortie courante Exemples gt output is X X console Voir galement e input input_1s output 314 ProloglA A gt Ed L2 gt s L a R gles pr d finies et proc dures externes particular_value R1 R2 Fonction Recherche d une solution particuli
148. sur des nombres exacts sont exacts Finalement il existe une syntaxe celle des nombres rationnels pour exprimer exactement la valeur des nombres exacts 3 Pour des raisons d efficacit et d ouverture vers d autres domaines d application on introduit une syntaxe permettant d exprimer des nombres inexacts la syntaxe des nombres flottants La porte l inexactitude ayant t ouverte on ajoute alors un certain nombre d op rations inexactes comme la racine carr e ou les fonctions trigonom triques et logarithmiques dont l utilit n est plus prouver 4 L inexactitude est contagieuse le r sultat d une op ration inexacte ou d une op ration exacte sur des nombres inexacts est inexact 5 Etre inexact n est pas une infamie Prolog II s efforce de travailler avec les nombres inexacts de la mani re la plus pr cise possible comme nous l avons d j dit par exemple au sujet de x y et x y lorsque x ou y sont des nombres flottants Expressions num riques Les expressions num riques sont des termes construits partir de variables Prolog II de constantes num riques et d op rateurs num riques 96 ProloglA Bulag Bolig Les contraintes num riques Les constantes num riques Il y a deux types de constantes num riques en Prolog III Ce sont les nombres entiers positifs ou nuls et les nombres flottants positifs ou nuls Les nombres entiers positifs ou nuls En voici quelques exemples 0
149. t rad t valeur rad t conversion en radian valeur t sin t valeur sin t sinus valeur t sqrt t valeur sgrt t racine carr e valeur t tan t valeur tan t tangente valeur t Affectation Tableaux assign i t Affecte le terme t qui doit repr senter une constante l identificateur i Tout se passe comme si i devenait le nom d une variable globale ult rieurement accessible pendant l ex cution de n importe quel but et statique r sistante au backtracking poss dant pour valeur Il s agit donc bien de l affectation classique comme elle se pratique en FORTRAN Pascal etc 172 PrologIA WA hrs a L environnement Exemple gt assign nom_fichier monfichier txt 0 gt val nom fichier x x monfichier txt gt En Prolog ces variables statiques peuvent tre vues comme une mani re particuli rement efficace d crire des assertions ou r gles sans queue Du point de vue de l utilisateur on peut consid rer que l emploi de assign et val tel qu il est fait ci dessus est quivalent gt retract nom fichier x l l gt assert nom fichier monfichier txt l gt nom fichier x x monfichier txt gt assign tab i t Affecte la valeur de t l l ment de rang i du tableau fab Ce tableau doit avoir t d fini au pr alable avec def_array voir ci dessous Les m mes restrictions que pr
150. t ichar et t Ichart t 0 Donnons quelques exemples de contraintes correctes xinum flidt f 3 l 7n u v a bli j toto z a gt b amp c t lt 3x 4 5y R gles et requ tes lt r gle gt lt t te gt gt lt but gt lt syst me de contraintes gt lt requ te gt lt but gt lt syst me de contraintes gt lt but gt l slash ou cut c est la m me chose lt terme gt lt t te gt lt terme gt Prolog IA 439 A Syntaxes nr avec les restrictions suivantes e la simple v rification des contraintes comme elles sont crites dans la r gle doit imposer au terme de lt t te gt d avoir une tiquette qui est un identificateur connu d avoir un nombre de fils connu e un but lorsque c est un terme doit tre de type lidt e les buts lorsqu ils sont pr sents doivent tres s par s par des caract res espaces e les r gles sont rang es par paquets ayant m me nom de pr dicat d acc s identificateur de t te et par sous paquets o ces pr dicats ont la m me arit Voici quelques exemples de r gles syntaxiquement correctes repas x y z gt hors d oeuvre x plat y dessert z add a b lt a b c gt gt l tuple binum c a b b chats oiseaux pattes tetes c o 4c 20 c o gt quelques exemples de requ tes syntaxiquement correctes repas salade viande d repas h sole d h salade add a b c addi c d e a
151. te du module est utilis pour la lecture de tout le reste du module y compris la directive end_module Le contexte qui existait avant la lecture du module est ensuite r tabli Si un module m contient une r gle avec le pr fixe m et le nom abr g ini_module alors celle ci est automatiquement ex cut e apr s la lecture ou le chargement ult rieur du module Le contexte de lecture du module permet de red finir de mani re claire certaines des primitives utilis es l int rieur d un module Exemple 184 ProloglA Bulag Bolig L environnement module exemple exemple out out x gt enjoliver x y sys out y end module exemple Module objet Une fois lus par Prolog III les l ments de code qui forment un module sont dits constituer un module objet La manipulation de modules objets ne concerne que les repr sentations internes des identificateurs la notion de contexte n intervient donc pas dans ces op rations Un module objet peut tre sauvegard dans un fichier magn tique en vue de son rechargement ult rieur Cela se fait par les primitives load et save Lorsqu un module objet est crit dans un fichier il est rang de telle mani re qu il est possible lors de la restauration du module de renommer ses identificateurs Il est ainsi possible de r soudre les conflits de noms quels qu ils soient et de construire des programmes qui n interf rent pas avec les donn es qu ils
152. terme 999 gt lt suite de termes 999 gt PrologIA fonction constructeur d arbre liste classique paire point e concat nation tuple produit par d faut liste vide tuple vide Doley Bolig Syntaxes Cette syntaxe va nous permettre de construire des expressions num riques l aide en particulier des quatres op rateurs des expressions bool ennes gr ce aux op rateurs bool ens amp lt gt gt de construire des tuples avec le constructeur de tuple lt gt et l op rateur de concat nation de former des arbres l aide des parenth ses ou des crochets Expressions num riques Les expressions num riques autoris es par Prolog III sont form es l aide de constantes num riques de variables des quatre op rations Ces expressions repr sentent des nombres Donnons quelques exemples d expressions num riques correctes X 355 113 3 2 1000 1 2 3 4 5 6 7 Y 1 3 4 X Y 2Z 5 4 3X 4 14 22 7 X 2X 1 Y A B X Y Insistons sur le fait qu une expression num rique reste une feuille et ne forme donc pas un arbre de profondeur sup rieure z ro et des exemples incorrects 5 X Y est un arbre dont l tiquette est 5 5 4X est syntaxiquement incorrecte XY est bien s r une variable et non pas X x Y Expressions bool ennes Les expressions bool ennes sont form es l aide de variables de bool ens et des op rateurs de priorit
153. texte s1 dans le fichier de nom s2 La forme un argument est quivalente save_window s1 s1 set_window s b x1 y1 x2 y2 Permet de manipuler la visibilit et l emplacement des fen tres d j cr es par Prolog II s Nom de la fen tre sous forme d une cha ne de caract res n console graphic pour les fen tres pr d finies b Entier qui indique si la fen tre sera visible 0 si invisible 1 si visible x1 y1 sont les coordonn es par rapport l cran du coin sup rieur gauche de la zone dessinable de la fen tre PrologIA 469 Bulag Primitives graphiques x2 y2 sont les coordonn es du coin inf rieur droit de la zone dessinable de la nouvelle fen tre l origine tant situ e au coin sup rieur gauche de l cran Exemple gt set window graphic 1 50 50 300 300 set window s b M me chose que ci dessus mais pour manipuler les attributs d une fen tre b peut tre soit un entier il indique alors si la fen tre sera visible 0 si invisible 1 si visible soit un attribut voir new_window Les attributs possibles sont respectivement pour les fen tres graphiques et modales lt SAVE 0 gt lt SAVE 1 gt lt SAVE r gt o r estun rectangle pour une fen tre texte lt FONT n gt lt FONTSIZE n gt Exemple gt set window console lt FONTSIZE 12 gt X create window s t v r1 r2 X create wind
154. un close_input Exemples gt in _ident I ceci est un identificateur I ceci est un identificateur gt in_ident I 12 gt gt gt in_ident I gt in_ident I V_ariable gt Voir galement e in_char in_char in_integer inl in_real in_sentence in_string in_term next_char next_char ProloglA 263 Ed L ka Ed ol R gles pr d finies et proc dures externes ee in_integer N Fonction Lecture d un entier Classe Proc dure externe Prolog M I Cat gorie Entr es sorties Param tres connus Aucun Messages d erreur Fin de fichier inattendue Description Lit un entier sur l unit active d entr e Si une fin de fichier est d tect e une erreur est signal e et tout se passe comme si on avait fait un close_input Exemples gt in_integer N 124578956810000 N 124578956810000 gt in_integer N ceci n est manifestement pas un entier gt in integer N in ident I 123nous irons au bo is 123 I nous irons au bois gt in integer N in real R 1213 06 N 1213 R 6 000000000000000e 02 Remarque in_integer lit un objet ayant la syntaxe d un entier Par exemple 12 2 ne sera pas lu comme l entier 6 seul l entier 12 sera pris en compte par in_integer Voir galement e in_char in_char in_ident inl in_real in_sentence in_string in_term next_char next_char 264 ProloglA Bo
155. val tab 154 xX X 2 redef array tab 40 gt val tab 50 X Erreur 246 Erreur dans val gt Voir galement e assign def_array undef_array val 324 ProloglA Bolig R gles pr d finies et proc dures externes e reinsert Fonction Insertion de r gles partir de l unit d entr e Classe Proc dure externe Prolog M II Cat gorie Entr es sorties Param tres connus Aucun Messages d erreur Voir ci apr s Description Cette r gle pr d finie fait basculer le syst me dans un mode pour lequel les r gles lues sur l unit d entr e courante sont ajout es au programme en cours dans l ordre dans lequel elles sont lues Le mode reinsert se termine soit quand une r gle vide est trouv e soit si l on rencontre la fin du fichier d entr e Exemple gt reinsert conc y y gt conc e x y e z gt conc x y z gt Si une erreur de syntaxe est rencontr e un avertissement est affich et un certain nombre de caract res en principe tous les caract res jusqu un ou jusqu la fin de la ligne sur l unit console sont ignor s Contrairement la primitive insert reinsert remplace un paquet d j existant par sa nouvelle d finition Attention ceci peut tre dangereux par exemple une erreur sur une r gle l int rieur d un paquet peut provoquer avec reinsert l crasement des r gles pr c dentes quand on continu
156. valeurs de plusieurs champs simultan ment Exemple gt set_configuration lt lt syntax Edinburgh gt lt format_out_num Ffloat gt gt 12 1 200000000000000e 01 Voir galement e set_config get_config get_configuration 344 ProloglA Bolig R gles pr d finies et proc dures externes set_context I S S D Fonction Description et activation d un contexte Classe R gle pr d finie Prolog MI Cat gorie Gestion des r gles et des identificateurs Param tres connus LS S D Messages d erreur Non Description Cette commande permet la fois de d crire un contexte et de l installer comme le contexte courant de lecture criture Lorsqu un nouveau contexte est activ l ancien contexte n est plus pris en compte Voir la section Structuration saisie et modification des r gles du chapitre Le contr le et l environnement des programmes pour la signification des arguments I nom du contexte nouvellement d fini S suite explicite S suite implicite D pr fixe par d faut Lorsque Prolog II est lanc le contexte courant de lecture criture est le contexte d fini par la commande set_context sys A nn PrologIA 345 2 gens 2 Bol R gles pr d finies et proc dures externes L set ident I N Fonction Affectation d un attribut un identificateur Classe R gle pr d finie Prolog MI
157. variable gt lt terme2 gt amp lt terme3 gt lt terme3 gt lt terme4 gt lt terme3 gt lt terme4 gt lt termes gt lt termes gt lt suite de termes gt lt termes gt lt terme gt lt termes gt lt termes gt lt termes gt lt variable gt lt constante gt lt lt suite de termes gt gt lt terme gt lt multiplicande gt lt entier gt lt r el gt lt terme gt lt suite de termes gt lt terme gt lt terme gt lt suite de termes gt PrologilA Bolig Bolig Concepts de base Un point important appara t imm diatement les expressions qui nous ont servi d finir les arbres et les op rations sur les arbres sont des termes En fait pour expliquer les constantes et les op rations nous n avons pas pu faire autrement que de d finir implicitement la syntaxe des termes sans variable Consid rons ces formules comme tant acquises ce que nous leur ajoutons maintenant est la possibilit d y mettre des variables Plus pr cis ment nous permettons d sormais d crire une variable tout endroit d un terme sans variable o pouvait figurer l expression d un arbre Limitations La syntaxe pr c dente autorise donc l criture de toute sorte de termes En particulier elle n tablit pas de dissym trie entre les deux op randes des op rations arithm tiques bool ennes ou de construction d arbre Il faut savoir qu au niveau des m canism
158. viderai sin Re in SR ed ne ee 27 Les cha nes de caract res ses nn enr anne DU 27 2 Op rations nn ne Need n 28 Op rations ool ennes sie n A EEEE EE EAEE Ei 29 Op rations ATTNE QUES a De Let nn re en ne 30 Op rations de construction d arbres 31 L s listes ddssiques sus ns e ena n A a ua 33 A Vafia plesia Dane aoa aa E er TEA a ce 34 Du KE a TE EET 35 DYN AXE ea E a E E aS EERE EE re Eaa ete te 35 EimitaH ONS rs eer raa A Mn mn nn ne aan EAEE A 37 D cembre 1990 Pr ologlA Table des mati res Exemples ss RE nt te fe etienne 38 IdentificateurS neioii anea o EEEIEE EEEE sine re 38 Identificateurs incorrects siisii erii sstssisiiiisin niisiis ssei ioiii 39 ISAE t EEEE A E E T 39 Entiers IMCOrrects serum e ni A A E de 39 lottantss ss sis Re ne ln tete EaR 40 lottants incorr cts sise ennemie E 40 C tact res sedans ete nr Me hi iii este 40 Chaines de caract res ss mate ee E den 41 Cha nes de caract res incorrectes unies 41 Expressions num riques ekenin irinari esii eeni annia 42 Expressions num riques incorrectes 43 Expressions bool ennes 43 Expressions mixtes arithm tico bool ennes 44 Autres termes ist is Han amener etes de 45 Termes iNCOrTects ss aimes ete ri ans alt en tion train Tete 45 Que repr sentent les termes 2 ss 46 AULCCLATONR EI LR AS An a a a nn nee 47 Des termes particuli reme
159. x0 x y0 y gr_line x y Tire un trait depuis la position courante x0 y0 jusqu au point x0 x y0 y qui devient la nouvelle position PrologIA 473 A Primitives graphiques n gr_penloc x y Donne en coordonn es enti res la position du crayon dans la fen tre graphique courante gr_erase Efface le contenu de la fen tre graphique courante et repositionne le crayon en haut et gauche gr_setorigin x y Change l origine des axes de sorte que x et y repr sentent les coordonn es de l angle haut et gauche de la fen tre L aspect de la fen tre n est pas modifi gr_rect n r gr_rect n x1 y1 x2 y2 Permet d appeler les routines de bases pour tout dessin s inscrivant l int rieur d un cadre rectangulaire r est un arbre correspondant la position du rectangle Cet arbre doit tre de la forme lt x1 y1 x2 y2 gt x1 y1 sont les coordonn es du coin sup rieur gauche et x2 y2 celles du coin inf rieur droit Le premier argument n qui repr sente un entier ou un identificateur d termine la proc dure appel e 0 frameRect frame Dessine le p rim tre du rectangle 1 paintRect paint Remplit le rectangle avec le motif associ au crayon 2 eraseRect erase Efface le rectangle et son contenu 3 invertRect invert Inverse la couleur de chaque points de l int rieur du rectangle Si le rectangle a un coloriage autre que noir et blanc le r sultat est d pendant de la machine 4 fra
160. y la pr c dence est n sinon on trouve un et la pr c dence est un nombre ind pendant de n et fourni en m me temps que l op rateur Indiquons de suite que la forme o l un des op randes est un point fx ne sert que pour construire des termes compos s Voici un tableau r capitulatif du calcul des pr c dences type pr c dence op pr c op gauche g droite d Le pr dicat pr d fini op ne permet pas de d finir de tels op rateurs compos s Prolog IA 445 A Syntaxes n suite type pr c dence op pr c dence fournie pr c op gauche g pr c op droite d lt f n gt lt op rateur gt lt fz n d gt lt op rateur gt lt zf n g gt lt op rateur gt lt zfz n 4 gt lt op rateur gt Les termes lt termes n gt lt fz n d gt lt terme d gt x lt terme g gt lt zfz n g d gt lt terme d gt a b lt terme g gt lt zf n g gt X lt f n gt 18 lt terme n 1 gt lt terme compos n gt lt terme compos n gt lt f n M gt lt terme M gt lt f n M gt x lt f n M gt lt terme M gt lt fz n M d gt lt terme d gt 2 1 x lt terme g gt lt zf n g M gt lt terme M gt lt f n M gt flx Cette derni re r gle lt terme compos e n gt permet de d crire sous forme d op rateurs les divers m canismes de parenth sage par des symboles comme les parenth ses
161. 1 et n2 ne sont pas tous les deux des valeurs enti res connues 4 Retardement des contraintes non lin aires Nous examinerons dans le d tail le processus de retardement des contraintes num riques non lin aires dans un chapitre enti rement consacr aux retardements Au niveau ou nous sommes permettons nous tout de m me une remarque Prolog II autorise l criture de contraintes non lin aires Retenons dans un premier temps que Prolog IIT ajoute au syst me de contraintes num riques toute contrainte qui est lin aire au moment o on se propose de r aliser cet ajout En d autres termes toute contrainte syntaxiquement non lin aire est trait e de mani re tout fait naturelle si les valeurs de suffisamment de variables sont connues au moment de l ex cution Voici un exemple 106 ProloglA Bulag Bolig Les contraintes num riques gt calculer X Y Z gt Z 3X Y Z X Y 2Z 0 y 0 gt calculer X Y 2 CX 22 V 2 gt calculer 1 Y 2Z Y Y1 Z 1 2 v1 1 2 1 2 Y1 1 2 1 2 V1 1 2 Y1 3 1 2 Y1 1 2 0 Dans le premier cas au moment de traiter l ensemble de contraintes li la seule r gle qu il est possible d appliquer pour r pondre la requ te celui ci est lin aire En effet le simple fait de conna tre la valeur de z suffit r aliser cette condition On obtient donc une r ponse qui fournit les uniques valeurs de x et y qui satisfont ce syst me li
162. 177 set_config 108 340 echo 341 epsilon_float 342 format_decimal 342 format_float 342 format_out_num 341 statistics 342 syntax 342 trace 340 tty_wrap 342 undefined_rule 343 set_configuration 344 set_context 180 182 345 set_ident 346 set menu 493 set_window 470 sfgetfile 516 517 sfputfile 517 518 SHAPE 468 si_alors_ sinon 166 simplification contraintes bool ennes 127 sin 172 370 size 80 152 347 solution d un syst me de contraintes 57 bool ennes 126 souris 480 soustraction 31 98 split 81 348 sqrt 173 370 srcBic 483 srcCopy 483 srcOr 483 srcXor 483 state 349 string 87 350 string_bool 86 351 string_ident 86 352 string_integer 86 354 string_real 86 355 stty 488 style 482 483 497 style_menu 497 sub 170 368 substring 86 356 sup 171 369 supe 172 369 sup rieur ou gal 101 sup rieur strict 101 suppress 10 15 191 357 suppression de r gles suppress 10 191 suspend_trace 360 symboles relationnels 554 ProloglA Poleg Index bool ens 120 num riques 100 syntax 342 Edinburgh 342 Prolog III 342 syntaxes choix du mode syntaxique 424 syntaxe de base 424 syntaxe Edimbourg 425 sys_command 361 syst mes de contraintes 54 syntaxe 438 454 T tab 403 tableaux def_array 174 tabulation 431 486 490 504 511 taille de la fonte 472 482 483 484 taille de la police de caract res 468 tailles 76 retard es 151 tan 173 370 tell 404 termes 35 connus 148 sans va
163. 2 PrologiA Bolig R gles pr d finies et proc dures externes close_context_dictionary S Fonction Fermeture d une famille d identificateurs Classe R gle pr d finie Prolog MI Cat gorie Gestion des r gles et des identificateurs Param tres connus 15 Messages d erreur Non Description D finit la partie ferm e de la famille S comme tant gale l tat courant de cette famille au moment o cette r gle est ex cut e Tout autre identificateur venant s ajouter cette famille par la suite ne sera pas dans sa partie ferm e et donc ne sera pas pris en compte dans les op rations utilisant la liste implicite de la commande set_context voir cette primitive sauf s il fait l objet d un appel de la r gle add_implicit Voir galement e add_implicit remove_implicit dictionary e set_context current_context PrologIA 223 2 gens 2 Bol R gles pr d finies et proc dures externes L close_input Fonction Fermeture de l unit d entr e courante Classe R gle pr d finie Prolog MI Cat gorie Entr es Sorties Param tres connus Aucun Messages d erreur Impossible de fermer le fichier Description L unit courante est ferm e sauf s il s agit de la console et son descripteur est enlev du sommet de la pile des unit s l unit pr c dente redevient unit courante close_input F Fonction Fermeture de l unit d entr e de nom F
164. 2 sys t1 t2 t1 sys t1 t1 t2 sys sys t1 t2 t1 gt t2 calcule le terme t1 gt t2 Notez bien la derni re ligne qui repr sente un exception dans le m canisme g n ral de construction En effet implique est une relation dans une contrainte et une op ration partout ailleurs Prolog IA 455 A Syntaxes n R gles et requ tes lt r gle gt lt terme gt lt stop gt lt requ tel gt lt terme gt lt stop gt lt stop gt espace De fa on plus pragmatique r gle et requ te ont la forme suivante lt r gle gt lt terme gt lt syst me de contraintes gt lt stop gt lt terme gt lt queue gt lt syst me de contraintes gt lt stop gt lt requ te gt lt queue gt lt syst me de contraintes gt lt stop gt lt queue gt lt terme gt lt terme gt lt queue gt Sur toute r gle ou requ te portent les restrictions suivantes e la simple v rification des contraintes comme elles sont crites dans la r gle doit imposer au terme de t te s il existe d avoir une tiquette qui est un identificateur connu d avoir un nombre de fils connu e un but lorsque c est un terme doit tre de type lidt e les r gles sont rang es par paquets ayant m me nom de pr dicat d acc s identificateur de t te et par sous paquets o ces pr dicats ont la m me arit 1 Dans cette impl menta
165. 2 X3 gt lt Y1 Y2 gt lt P1 P2 1 P4 P5 gt booleans lt X1 X2 X3 Y1 Y2 gt circuit lt X1 X2 X3 gt lt Y1 Y2 gt lt P1 P2 0 P4 P5 gt circuit lt X1 X2 X3 gt lt Y1 Y2 gt lt P1 P2 1 P4 P5 gt booleans lt X1 X2 X3 Y1 Y2 gt not circuit lt X1 X2 X3 gt lt Y1 Y2 gt lt P1 P2 0 P4 P5 gt 544 ProloglA Bolig Annexes 8 Un puzzle num rique send p3e Le programme L addition doit tre r solue avec des chiffres distincts SEND MORE A solution l J K allDifferentDigits lt M S O E N R D Y gt integers lt M S O E N R D Y gt S 0 MHO I U K I 1000S 100E 10N D 3 J 1000M 1000 10R E K 10000M 10000 100N 10E Y integers lt gt integers lt E gt R enum E integers R allDifferentDigits lt gt allDifferentDigits lt X gt S outsideof X S allDifferentDigits S 0 lt X X lt 9 outsideOf X lt gt outsideOf X lt Y gt S outsideOf x S xHv La question solution I J K ProloglA 945 Annexes 9 Un probl me de remplissage rectangle p3e Le programme Remplir un rectangle 1 x avec N carr s distincts remplirRectangle A C creerCarres C remplirZone lt 1 A 1 gt L C lt gt A gt 1 creerCarres lt gt creerCarres lt B gt C creerCarres C rendreDistinct B C B gt 0
166. 215 cela fait un entier vraiment tr s grand 2 Les nombres flottants sont impl ment s avec le type num rique extended conform ment la norme IEEE 754 Cod sur 80 bits c est un type plus pr cis que les double classiques sur 64 bits 1008 ProloglA e Utilisation de Prolog III sur Macintosh Espaces et tailles par d faut e Fspace principal 50000 option c e Pile de backtracking 10 000 option b e Espace secondaire 10 000 option u e Espace du code 80 000 option r e Pile pour la r cup ration de m moire 1000 option m e Dictionnaire interne 36 000 option i e Dictionnaire externe 32760 option e Toutes ces tailles sont exprim es en nombres de mots de quatre octets l exception des deux dictionnaires o cette taille est donn e en octets 4 A propos de l environnement de Prolog Ill sur Macintosh Utilisation d un diteur h te La question de l utilisation d un diteur de textes plus ou moins perfectionn ne se pose pour ainsi dire pas sur le Macintosh Sauf la fen tre console toutes les fen tres de texte ouvertes sous Prolog III comportent un diteur de textes avec les fonctionnalit s standard copier coller rechercher ete PrologIA 1009 Utilisation de Prolog III sur Macintosh La fen tre console est la seule depuis laquelle on peut lancer un programme Prolog II en contrepartie elle ne poss de pas les fonctions d dition des autres fen tres Comme un terminal cla
167. 28 29 30 31 32 33 34 35 36 37 38 39 40 41 41 42 46 48 49 50 51 52 53 54 Fichier inexistant Fin de fichier inattendue Tete de regle incorrecte Debordement de la pile de marquage Debordement de l espace auxiliaire booleen Entier trop long Predicat evaluable incorrect Erreur de lecture Nombre incorrect d argument du predicat evaluable Tuple trop grand 2 Chaine trop grande Identificateur trop long 1 Probleme dans assert Caractere incorrect Conflit Pev Regle Operande non arithmetique Tuple trop grand 2 Erreur de fermeture de fichier 1 Erreur d ouverture de fichier Erreur de fermeture de fichier 2 Plus de fichier d entree Trop de fichiers ouverts Trop de fichiers de sortie Plus de fichiers de sortie Erreur dans assert ou in_term Erreur dans in_term Erreur dans assert 1 Mode d insertion inconnu Regle deja definie Debordement de l espace auxiliaire simplex Erreur lors du compactage de l espace des regles Block indefini Memoire saturee 1 Erreur d ouverture du fichier Prolog3 log Erreur dans assert 2 Impossible d ouvrir le fichier PrologiA Bolig Annexes 55 56 100 101 102 103 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 Impossible de fermer le fichier Memoire saturee 2 Debor
168. 459 num riques 98 op rations 28 arithm tiques 30 98 bool ennes 29 concat nation de tuples 32 76 construction d arbre 31 71 construction de tuple 32 71 construction g n rale d arbre 32 71 option fermeture 473 ou 29 119 out 195 308 outc 196 309 outl 195 310 outm 196 311 outml 7 196 312 output 11 197 313 516 output_is 314 P paire point e 33 83 param tres graphiques button 501 button2 501 buttonD 502 cb 500 ccol 504 clipRect 476 col 504 crow 504 ceditf 501 erase 475 476 477 eraseOval 475 ceraseRect 475 eraseRoundRect 475 frame 475 476 frameOval 475 552 ProloglA Poleg Index frameRect 475 frameRoundRect 475 glist 502 group 505 hfill 505 invert 475 476 477 invertOval 475 invertRect 475 invertRoundRect 475 paint 475 476 477 paintOval 475 paintRect 475 paintRoundRect 475 rb 500 rb1 501 row 504 text 500 cuserltem 503 vfill 504 parasite 164 particular_value 105 315 partie ferm e d une famille 179 pgcd 316 pixels 466 471 474 482 504 511 plus unaire 98 police de caract res 469 ppcm 317 pr cision parfaite 26 94 predefined 190 318 pr fixe 24 syntaxe 177 434 444 primitive de groupement 505 primitives bool ens 128 conversions de cha nes 86 num rique 104 tuples 80 primitives d agencement 504 primitives de description 500 print_window 472 priorit s des op rateurs bool ens 119 des op rateurs num rique
169. 469 see 401 seen 402 s mantique 62 d clarative 62 des termes 46 op rationnelle 62 s parateur 177 set_config 108 340 echo 341 ProloglA Poleg Index G n ral epsilon_float 342 format_decimal 342 format_float 342 format_out_num 341 statistics 342 syntax 342 trace 340 tty_wrap 342 undefined_rule 343 set_configuration 344 set_context 180 182 345 set_ident 346 1011 set_menu 493 set_ window 470 sfgetfile 516 517 sfputfile 517 518 SHAPE 468 si_alors_ sinon 166 simplification contraintes bool ennes 127 sin 172 370 size 80 152 347 solution d un syst me de contraintes 57 bool ennes 126 sortie log 1006 souris 480 soustraction 31 98 split 81 348 sqrt 173 370 srcBic 483 srcCopy 483 srcOr 483 srcXor 483 state 349 string 87 350 string_bool 86 351 string_ident 86 352 string_integer 86 354 string_real 86 355 stty 488 style 482 483 497 style_menu 497 sub 170 368 substring 86 356 sup 171 369 supe 172 369 sup rieur ou gal 101 sup rieur strict 101 suppress 10 15 191 357 suppression de messages 1007 de r gles suppress 10 191 suspend_trace 360 symboles relationnels bool ens 120 num riques 100 syntax 342 Edinburgh 342 Prolog III 342 syntaxes choix du mode syntaxique 424 syntaxe de base 424 syntaxe Edimbourg 425 sys_command 361 syst mes de contraintes 54 syntaxe 438 454 T tab 403 tableaux def_array 174 tabulation 431 486 490 504 511 taille de l
170. 6 max_value 105 295 maximum d une expression num rique 105 member 391 menu fugitif 493 menu hi rarchique 493 menu pop up 493 min_value 105 296 minimum d une expression num rique 105 mod 106 171 297 369 MODAL 467 modes de transfert 483 modifications de la taille des piles 1006 module 24 178 298 objet 186 source 185 utilisateur 1011 module directive 185 modules exemples 186 moins unaire 98 motif 482 MPW 489 mul 170 368 mult 105 157 158 299 multiplication 31 98 N naive_reverse 82 name 392 new 300 new_window 467 newline 431 next_char 301 next_char 302 nil 33 nl 393 NLINES 468 no_echo 197 303 no_trace 304 nombres 14 entiers 26 syntaxe 428 flottants 26 94 syntaxe 429 fractionnaires 94 rationnels 94 non 29 119 non pr dicat 166 nonvar 394 not 305 num 106 306 number 395 numden 307 O omission de l op rateur de multiplication 99 op 396 op rateurs 445 bool ens quivalent 119 et 119 implique 119 non 119 ou 119 Edimbourg 459 num riques 98 op rations 28 arithm tiques 30 98 bool ennes 29 concat nation de tuples 32 76 construction d arbre 31 71 construction de tuple 32 71 construction g n rale d arbre 32 71 option fermeture 473 1038 ProloglA Poleg Index G n ral ou 29 119 out 195 308 outc 196 309 outl 195 310 outm 196 311 outml 7 196 312 output 11 197 313 516 output_is 314 P paire point e 33 83 param tres grap
171. 76 num riques 101 exemples 101 forme normale 102 retard es 156 retard es 151 syntaxe 439 contraintes de type lbool 53 120 lboolt 53 120 char 53 Ichart 53 lid 53 lidt 53 Inum 53 100 Inumt 53 100 ltuple 53 contraintes num riques 14 control 497 contr le 162 coordonn es horizontales 473 coordonn es verticales 473 cos 172 370 coupure 164 cpu_time 198 228 crayon 474 481 482 create_button 515 create window 471 current_context 182 229 current_predicate 187 230 cut 231 cut coupure 164 D def_array 174 232 default 167 234 ProloglA Poleg Index d finition de contexte set_context 180 deactivate_button 515 dialogue de saisie de nom de fichier 516 dialogue de s lection d un fichier 516 dictionary 184 235 dif 237 DISTANCE 468 div 106 171 238 368 division 31 98 dot 239 E echo 197 240 341 edinburgh 241 EDIT 467 edit 497 edit 242 galit 50 enable_menu 496 end_module 185 243 ensemble de contraintes bool ennes 122 entr e sorties 192 enum 104 244 epsilon_float 342 eq 246 eql 171 369 escape 431 espacement horizontal 505 espacement vertical 504 et 29 119 ex cution d un programme 64 exemples arbres 71 caract res 40 cha nes 41 constructeurs 73 contraintes 56 contraintes bool ennes 122 contraintes num riques 101 contraintes sur les arbres 74 contraintes sur les cha nes 85 contraintes sur les tuples 78 entiers 39 e
172. 8 ProloglA Utilisation de Prolog III sur Macintosh CLibraries CSANELib o Setfile a B Prolog IIl new Move Prolog IIlI new monProg On refait la compilation de userrule c et l dition de liens de monProg make f prolink3 gt tmp tmp Lan ons le et voyons les r sultats affich s dans la console PROLOG III v1 2 Decembre 1990 C PrologIA 1989 90 1 2 c 1 2 1 4 c 1 4 PROLOG III v1 2 Decembre 1990 C PrologIA 1989 90 Listings Fichier macuser h include lt stdio h gt define TRUE 1 define FALSE 0 define ERR3_NOERR 0 define ERR3 NOINI 2 define ERR3 ERRANA 3 define ERR3 DEJAINI 4 define ERR3 ABANDON 5 define PROMAIN 1 define PROCALL 0 typedef char adr extern FILE entree sortie sorerr extern adr GetArg long int n adr t Convert StringC to StringP char buf PrologiA 1029 Utilisation de Prolog III sur Macintosh f Doley 1030 Convert LongIntC to IntP long int n Convert DoubleC to NumP double d extern long int GetArity adr terme PutArg long int n adr T adr t Convert StringP to StringC adr t char buf long int size buf Convert NumP to DoubleC adr t double f Convert _IntP to LongIntC adr t long int i int Pro3lnitial int argc char argv int autoprolog int Pro3Goal char g int Pro3Final ifdef mpw extern adr Convert ExtendedC to
173. AIL est plus nergique que la commande fail qui est plus fine RULE RULE no FAIL SYNTAXE RULE n r gle ProloglA 2021 Bulag Outils de mise au point DESCRIPTION La commande RULE d apr s le nom du port permet de s lectionner le num ro de la r gle utiliser lorsqu on est sur les ports RULE ou no Cette commande est activable sur le port FAIL si celui ci est cons cutif un port no gt dizaine x 1 1 CALL dizaine x DBG s 1 1 RULE r1 dizaine x dizaine 10 DBG RULE 3 1 1 RULE r3 dizaine x dizaine 30 DBG s 1 1 ok r3 dizaine 30 DBG 1 1 EXIT r3 dizaine 30 DBG O OJEXIT r1 query DBG x 30 gt REMARQUES e Il y a bien s r erreur lorsque le num ro fourni ne correspond aucune r gle au sein du paquet Aucune action n est alors faite 8 Gestion des options du d buggeur Ces options sont imprimables avec la commande show et modifiables avec la commande set d crites la fin de cette section Elle servent de param trage du d buggeur et en modifient le comportement essentiellement au niveau de la quantit d information affich e tracemode valeur 1 2 3 valeur par d faut 2 Cette option indique quelle est la pr cision de l impression des termes voir trace et prend donc une valeur parmi les nombre 1 2 ou 3 maxlevel valeurs 1 valeur par d faut 1 Indique quelle est le niveau
174. Classe R gle pr d finie Prolog MI Cat gorie Entr es Sorties Param tres connus F qui doit tre une cha ne de caract res Messages d erreur Impossible de fermer le fichier Description L unit de nom F qui doit figurer dans la liste des unit s ouvertes est ferm e et son descripteur est enlev de cette liste Voir galement e input 224 PrologilA Bolig R gles pr d finies et proc dures externes close_output Fonction Fermeture de l unit de sortie courante Classe R gle pr d finie Prolog MI Cat gorie Entr es Sorties Param tres connus Aucun Messages d erreur Impossible de fermer le fichier D finition L unit courante est enlev e du sommet de la pile des unit s de sortie ouvertes sauf s il s agit de la console Si elle correspond un fichier alors celui ci est ferm close_output F Fonction Fermeture de l unit de sortie de nom F Classe R gle pr d finie Prolog MI M Cat gorie Entr es Sorties Param tres connus F qui doit tre une cha ne de caract res Messages d erreur Impossible de fermer le fichier Description L unit de nom F qui doit figurer dans la liste des unit s de sortie ouvertes est ferm e et son descripteur est enlev de cette liste Voir galement e output PrologIA 225 2 gens 2 Bol R gles pr d finies et proc dures externes L conc3 U1 U2 U3 Fonction Concat natio
175. Contraintes num riques Param tres connus R1 Messages d erreur Expression non born e Erreur 59 Arguments de mauvais type Erreur 60 Description Calcule le maximum m de R1 et ajoute au syst me de contraintes courant la contrainte R2 m Echoue lorsque R1 est born sup rieurement sans pour autant avoir un maximum la borne sup rieure ne peut tre atteinte par R1 Provoque une erreur lorsque R1 ne peut tre typ num rique Erreur 60 ou encore lorsque l expression num rique R1 n est pas born e sup rieurement Erreur 59 Exemples gt maximum R R R 2X Y X lt 2 Y lt 3 T RE 07 SoA gt maximum R R R 2X Y X lt 2 Err 59 Expression non bornee lors d un calcul d extremum gt maximum R R R 2X Y X lt 2 Y lt 3 gt Remarque On pourra utiliser la primitive block pour la r cup ration des erreurs Voir galement e minimum lower_bound upper_bound maximize minimize ProloglA 295 mxxxv 2 gens 2 Bol R gles pr d finies et proc dures externes L maximize R Fonction Maximiser une expression num rique Classe R gle pr d finie Prolog III Cat gorie Contraintes num riques Param tres connus R Messages d erreur Expression non born e Erreur 59 Argument de mauvais type Erreur 60 Description Equivalent mais plus performant maximum R R Calcule le maximum m de R et ajoute au syst me de contraintes courant
176. Des variables Prolog III ordinaires peuvent appara tre dans une expression valuable la condition qu elles soient contraintes repr senter une valeur connue 168 ProloglA WA hrs a L environnement Exemples gt val add mul 2 add 3 4 1000 x x 1014 gt val 2 3 4 1000 x x 1014 gt L int gration de l arithm tique au c ur de Prolog II fait que les expressions valuables n ont souvent pas la m me signification qu en Prolog II du moins lorsqu elles sont crites dans la bonne syntaxe Ecrivons les deux termes qui ont t valu s dans l exemple pr c dent gt t add mul 2 add 3 4 1000 t add mul 2 add 3 4 1000 gt t 2 3 4 1000 t 1014 gt Lorsqu une fonction valuer a un nombre incorrect d arguments ou lorsque certains de ses arguments sont du mauvais type il se produit une erreur Chaque fonction valuable doit avoir des arguments d un type pr cis aucune conversion automatique de type n est effectu e lors de l valuation e La valeur d un nombre ou d une cha ne est gale ce nombre ou cette cha ne e La valeur d un tableau indic est gale la valeur de l l ment correspondant de ce tableau Exemple gt def_array tab 100 assign tab 50 3 gt val tab 50 x x 3 gt e La valeur d un identificateur i est d finie comme suit si une constante k a t affect e
177. Fonction Impression de r gles Classe R gle pr d finie Prolog MI Cat gorie Gestion des r gles et des identificateurs Param tres connus Voir ci apr s Messages d erreur Argument de mauvais type R gle inexistante Description Liste le s paquet s de r gles de nom I et d arit A du module d termin par le pr fixe par d faut du contexte courant V d signe une variable lt I A gt Toutes les r gles composant le paquet de nom i et d arit A lt I V gt Toutes les r gles dont l acc s est I quelque soit leur arit lt V A gt Toutes les r gles d arit A appartenant au module ayant le pr fixe par d faut du contexte de lecture et criture courant dont l arit est A 290 ProloglA Bolig R gles pr d finies et proc dures externes list lt I1 A1 gt lt In An gt Fonction Impression de r gles Classe R gle pr d finie Prolog MI Cat gorie Gestion des r gles et des identificateurs Param tres connus Voir ci apr s Messages d erreur Argument de mauvais type R gle inexistante Description Liste chacun des paquets de r gles d sign s par les l ments de la liste de la m me fa on que list lt A lI gt ProloglA 291 2 gens 2 Boli R gles pr d finies et proc dures externes L list lt I A gt N Fonction Impression de r gles Classe R gle pr d finie Prolog MI Cat gorie Gestion des r gles et des identific
178. Fonction identique assert compatibilit Edinburgh Classe R gle pr d finie Prolog II Edinburgh Cat gorie Gestion des r gles et des identificateurs Param tres connus TetQ Messages d erreur si Q n est pas une liste classique si T est une t te de r gle incorrecte Identique assert T Q 208 ProloglA Bolig R gles pr d finies et proc dures externes assign I T Fonction Affectation Classe R gle pr d finie Prolog MI Cat gorie Contr le Param tres connus TetI Messages d erreur Si T ne repr sente pas un identificateur un nombre un caract re ou une cha ne de caract res Description Affecte le terme T qui doit repr senter un identificateur un nombre un caract re ou une cha ne de caract res l identificateur I Tout se passe comme si I devenait le nom d une variable globale ult rieurement accessible pendant l effacement de n importe quel but et statique r sistante au backtracking poss dant T pour valeur Il s agit donc bien de l affectation classique comme elle se pratique en FORTRAN Pascal etc Exemple gt assign nom fichier monfichier txt gt val nom fichier x x monfichier txt En Prolog ces variables statiques peuvent tre vues comme une mani re particuli rement efficace d crire des assertions ou r gles sans queue Du point de vue de l utilisateur on peut consid rer que
179. HV U N1 U X X4 U V X N2 V N1 V X X4 X4 N2 N1 N1 gt 0 N2 gt 0 gt Cet exemple montre les limites des contraintes retard es faisant intervenir des op rations de concat nation Dans ce cas de figure les valeurs repr sent es par U et V ne sont pas suffisamment connues pour permettre de d tecter l incoh rence de cet ensemble de contraintes Contraintes num riques retard es Bien que seules les contraintes lin aires soient prises en compte au niveau des algorithmes fondamentaux de Prolog II le langage autorise le programmeur exprimer des contraintes non lin aires Dans la plupart des cas il s agira d une facilit d criture pour viter l emploi du pr dicat valuable bound_mult les expressions tant lin aires de fait au moment de l unification un nombre suffisant de variables pr sentes dans ces expressions tant alors connu Dans le cas contraire l ajout de la contrainte est retard jusqu ce que celle ci devienne lin aire Le processus automatique de retardement peut se programmer gr ce l utilisation de freeze et nous en expliquerons comme pr c demment le fonctionnement en d crivant les r gles Prolog III qui effectuent ce retar dement des contraintes Voici ces r gles qui reproduisent le traitement effectu par la r gle pr d finie mult La r gle pour la division retard e est donn e pour m moire delayed mult X Y Z gt freeze X dela
180. IONS sissioni D ENE ES EASE NASSE 103 bes In quationS ss aeinn enen ian t Sn e ea a a 104 3 R gles pr d finies et proc dures externes sp cifiques 104 V rifications de types 106 DIV ES EE ren ne ed dat E ee et Re 106 4 Retardement des contraintes non lin aires 106 5 Formats N T SOTHE Sn Sn nn ete 108 6 Exemples de Programmes shine onotolas 108 Calcul bancaires siens a a a E trees 108 Cry pto arihm tig tunes noue inner dns n tune ne en 109 Remplissage d un rectangle par des carr s 110 Les contraintes Dool ennes issii estss ier esseeri 117 L Introdu tion sine en nant eee 118 2 Quelques d finitions et remarques ss 118 Expressions bool ennes ssssssssssssssss 119 Priorit s des op rateurs bool ens 119 Contraintes bool enh es ssssssisssnsssunssiusensn 120 Remarques importantes 121 Ensembles de contraintes bool ennes sssssseseseeessseeeeeeeensasenesenenea 122 Exemples de contraintes bool ennes 122 Forme normale conjonctive ssss 123 Affectations bool ennes ss 125 ProloglA vii Table des mati res Solution d un ensemble de contraintes bool ennes 126 Simplification de syst mes de contraintes 127 R gles pr d finies sp cifiques
181. Index G n ral Pely put_integer 1014 1020 1021 put_real 1014 1020 1021 put_string 1014 1020 1021 PutArg 1014 1015 Q qualifieur 24 quit 8 198 320 1008 R raccourci 496 rad 172 370 radio bouton 500 rafra chissement de la fen tre graphique 473 rational 106 322 read 398 real 106 323 r capitulatif op rations et relations bool ennes 123 op rations et relations d finies sur les arbres et les tuples 79 redef_array 324 r gles 60 pr d finies ajout de nouvelles 1010 bool ens 128 num rique 104 tuples 80 syntaxe 440 456 reinsert 188 189 325 relations 49 bool ennes 120 comparaisons num riques 52 de type 53 galit 50 implication 52 120 in galit 50 nombre de fils 74 num riques 100 unaires 53 reload 191 327 remove_implicit 183 328 1040 repeat 329 r pertoire exemples 1004 requ tes 61 syntaxe 440 456 reset_cpu_time 198 330 reset_window 472 r solution des syst mes de contraintes 57 restore_menubar 497 restrictions concat nation 77 lin arit 102 nombres entiers 102 taille 76 resume_trace 331 retardements concat nation 154 contraintes non lin aires 106 contraintes num riques 156 freeze 149 tailles 151 retour chariot 486 490 502 511 1008 1010 retract 190 332 399 retractall 400 return 431 rubout 431 rule 190 333 rule_nb 336 S sauvegarde d un module 11 sauvegarde de modules save 192 SAVE 468 470 save 192 337 save_menubar 497 save_window
182. K 1 9567 J 1085 K 10652 Remplissage d un rectangle par des carr s Voici maintenant un probl me tir de l article d Alain Colmerauer une introduction Prolog I qui met bien en valeur la partie num rique de Prolog III Etant donn un entier n on s int resse savoir s il existe N carr s de dimensions distinctes qui peuvent tre assembl s pour former un rectangle Dans l affirmative on aimerait bien entendu conna tre les dimensions de ces carr s et du rectangle form Voici par exemple deux solutions ce probl me pour N 9 110 ProloglA Bulag Les contraintes num riques On d signera par a le rapport de la longueur du plus grand c t avec celle du plus petit c t du rectangle construit On peut videmment supposer que la longueur du plus petit c t est 1 et que la longueur du plus grand c t est a Il faut donc remplir un rectangle de dimensions 1 x a par N carr s tous distincts Ce remplissage se fera en pla ant successivement chaque carr dans la position la plus basse possible et hauteur gale dans la position la plus gauche possible En se r f rant au sch ma qui suit la base de l algorithme de remplissage consistera alors 1 placer un carr dans le coin inf rieur gauche du rectangle 2 remplir de carr s la zone a si elle n est pas vide 3 remplir de carr s la zone 8 si elle n est pas vide ProloglA 111 Bulag Les contraintes num
183. Les identificateurs entre guillemets ne sont pas des chaines de caract res Termes Op rateurs Les op rateurs permettent d exprimer de fa on simples les arbres et expressions Leur syntaxe est la suivante 444 PrologIA Bolig Syntaxes lt op rateur gt lt constante gt lt variable gt lt suite de caract res gt avec la restriction que lt suite de caract res gt ne commence ni par une constante ni par une variable ni par un espace ni par ni par La longueur de cette suite d pend des d clarations d op rateurs connues de Prolog II au moment de la lecture Cette suite est la plus longue possible parmi ces d clarations On distingue quatre sortes d op rateurs ceux qui sont pr fix s et admettent un op rande droite ceux postfix s qui ont un op rande gauche les op rateurs infixes ayant deux op randes droite et gauche et ceux qui sont isol s sans op randes Nous noterons ces types d op rateurs fz zf zfz f qui r sument la fa on dont l expression est construite f d signant l op rateur et le ou les z d signant les op randes On attribue tout op rateur sa priorit ou pr c dence sous la forme d un nombre entier n Par convention la pr c dence des op randes se calcule l aide de cet n et de la forme exacte du type de l op rateur xf yf f de la fa on suivante si en lieu d un op rande z on trouve x la pr c dence est n 1 si on trouve
184. Lit la plus grande suite x de caract res qui constituent un terme Le terme doit se terminer par un point virgule qui n est pas lu Exemples gt in term X arbre 3 4 lt a b gt in char Y X arbre 3 4 lt a b gt Y gt in _term xX termel u terme2 v u lt v X termel u u num Remarques 1 Eviter d inclure des espaces dans tout ce qui n est pas parenth s 2 Seul le premier terme est pris en compte 3 Il peut y avoir un syst me de contraintes qui lui est pris en compte Voir galement e in_char in_char in_ident in_integer inl in_real in_sentence in_string next_char next_char ProloglA 269 2 gens 2 Boli R gles pr d finies et proc dures externes L ini S Fonction Lecture dune ligne Classe Proc dure externe Prolog M I Cat gorie Entr es sorties Param tres connus Aucun Messages d erreur Fin de fichier inattendue Description Lit une ligne jusqu au premier retour chariot n sur l unit active d entr e Le r sultat est donn dans la chaine de caract res S Si une fin de fichier est d tect e une erreur est signal e et tout se passe comme si on avait fait un close_input Voir galement e in_char in_char in_ident in_integer in_real in_sentence in_string in_term next_char next_char 270 ProloglA Bolig R gles pr d finies et proc dures externes input F Fonction Classe
185. Module source Un module source est d fini comme la suite des r gles comprises entre les deux directives module pr fixe du module suite explicite suite implicite pr fixe par d faut ProloglA 183 L environnement end_ module pr fixe du module La directive module fait basculer Prolog III dans le mode insertion et la directive end_module le fait sortir de cet tat Par cons quent les l ments compris entre ces deux directives doivent tre des r gles ou des commentaires qui sont ignor s L argument d signant le pr fixe du module dans la directive module doit tre le m me que celui figurant dans la directive end_module et toutes les r gles comprises entre ces deux directives doivent avoir un identificateur d acc s avec ce pr fixe ceci permet de d tecter la lecture les ventuelles erreurs de nommage Na vement on peut dire que la directive module signifie ins rez les r gles qui suivent avec le contexte de lecture d fini ici et en v rifiant que les r gles lues poss dent ou acqui rent bien le pr fixe voulu Lorsque tous les arguments ne sont pas donn s on a les valeurs par d faut suivantes en supposant que le contexte lors de la lecture de la directive module dispense de l crire sys module module p lt gt module p I sys p module p s lt module p s sys p module p s i lt gt module p S i p Le contexte de lecture d fini par l en t
186. OK field1 John L Les primitives de description d objet sont les suivantes text s ou s D crit une ligne de texte non ditable repr sent e par s o s est une cha ne text i D crit une ligne de texte non ditable dont le nom de zone est i o 1 est un identificateur Si une valeur est associ e dans 11 c est cette valeur qui est la valeur initiale du champ sinon c est la cha ne vide Il n est jamais associ de valeur finale cette zone puisqu elle n est pas modifiable 498 ProloglA Bolig Primitives graphiques cb i cb i v D crit une bo te cocher repr sent e par une des deux valeurs enti res possibles de v qui sont soit 1 soit 0 Si la valeur de v n est fournie ni en argument ni dans la liste 11 c est la valeur 0 qui est donn e par d faut Lorsque v est red finie dans 11 c est toujours cette derni re valeur qui est prise en compte rb lt g i gt rb lt g i gt v D crit un radio bouton i d un groupe g o g est un identificateur et i une constante Ce radio bouton de valeur 0 ou 1 fait partie du groupe g avec au plus une valeur possible 1 dans le groupe Si la valeur de v n est fournie ni en argument ni dans la liste 11 c est la valeur 0 qui est prise par d faut Lorsque v est red finie dans 11 c est toujours cette derni re valeur qui est prise en compte En sortie nom_de_zone est repr sent par lt g i gt l et valeur_finale par 0 o
187. Pl Syntaxes L 4 Remarques g n rales Diff rences des modes Terminons ce chapitre par quelques diff rences entre ces deux modes syntaxiques e Les op rateurs et unaires ne sont pas de m me priorit s dans ces deux syntaxes En syntaxe de base ils sont au m me niveau que les et binaires e Il n est pas possible en syntaxe Edimbourg d crire une cascade de contraintes inf rieur resp sup rieur e Le programmeur ne peut pas d finir d op rateur dans la syntaxe de base en syntaxe Edimbourg voir le pr dicat op e En syntaxe Edimbourg le gt implique a une priorit inf rieur celle de lt gt quivalent alors qu elles sont gales en syntaxe de base e En syntaxe de base il est possible de rentrer directement des r gles En mode Edimbourg certaines r gles faits ressemblants syntaxiquement des requ tes il tait n cessaire de poss der un mode requ te et un mode insertion de r gle voir les pr dicats insert et consult Cohabitation des deux syntaxes Un point g nant la cohabitation de r gles dans les deux syntaxes est celui de l affichage de termes provenant de l autre syntaxe et contenant des variables Un exemple sera plus explicite gt egal x x gt gt edinburgh list egal egal x x x n a pas ici la syntaxe de variable bien qu elle SOIT une variable egal 1 B B 1 assert titi Var Var
188. Premi re forme Supprime tout le paquet de r gles de nom I Se com porte comme suppress l Deuxi me forme Supprime tout le paquet de r gles de nom I dont l arit est A Se comporte alors comme suppress I A Echoue lorsque les arguments ne sont pas connus Voir galement e retract ProloglA 377 Bulag R gles pr d finies Edimbourg assert T assertz T Fonction Ajout d une r gle la fin de son paquet Classe Primitive Edimbourg Cat gorie Gestion des r gles et des identificateurs Param tres connus ack Messages d erreur Si T est une r gle incorrecte Description Ajout d une r gle la fin de son paquet T doit tre un terme ayant l une des formes d crites en introduction La t te de la r gle doit tre un arbre tiquet par un identificateur connu L effacement de assert T ajoute la r gle ou le fait T au dessous du groupe de r gles ayant le m me nom que la t te de T Par exemple les deux commandes suivantes assert conc Y Y assert conc E X Y E Z conc X Y Z tap es dans cet ordre ont pour effet l ajout du programme conc Y Y conc E X Y E Z conc X Y Z Ajouter des r gles comportant un syst me de contraintes peut tre r alis de deux fa ons Une premi re fa on pose des contraintes en dehors de l appel 378 ProloglA Bolig R gles pr d finies Edimbourg assert hors de X
189. ProloglA R gles pr d finies Edimbourg X lt Y X lt Y X gt Y X gt Y Fonction Evaluation et v rifications des relations Classe Primitive Edimbourg Cat gorie Evaluation de fonctions pr d finies Param tres connus Xet Y Messages d erreur Erreur dans val Description X et Y sont valu es voir val Les comparaisons sont ensuite effectu es entre leurs valeurs qui peuvent tre de type num rique identificateur ou cha ne de caract res Dans le cas des cha nes la comparaison est alphab tique Dans le cas des identificateurs la comparaison lieu sur les cha nes composant leur partie abr g e Ces quatres primitives sont d finies comme suit X lt Y val inf X Y 1 X lt Y val infe X Y 1 X gt Y val sup X Y 1 X gt Y val supe X Y 1 Exemples X gt 3 Erreur dans val 3 4X gt Y X 1 4 Y 1 X 1 4 Y 1 ABC lt BCD label gt labelle Voir galement e val is PrologiA 411 Bolig R gles pr d finies Edimbourg X Y Fonction Unification de deux termes Classe Primitive Edimbourg Cat gorie Arbres listes et tuples Param tres connus Aucun Messages d erreur Non Description Se comporte comme la r gle pr d finies eq Cette primitive est d finie comme suit Exemples f X E X E E E X X f X Voir galement e eq 412 PrologilA B
190. R cup re la valeur d un param tre concernant le terminal gttyC USEGETKEY v rend 0 ou un nombre sign de ticks gtty TERM x rend actuellement TTY ou MPW Bo tes de choix gr_list r Liste InSel InTop OutSel OutTop op La r gle gr_list g re un choix d l ment s dans une liste Cette derni re s affiche dans la fen tre graphique courante r Le rectangle englobant ascenseurs compris de la forme lt x1 y1 x2 y2 gt Liste La liste d items C est une liste binaire de constantes ventuellement mixtes cha ne entier r el ident InSel C est la s lection initiale sous la forme d une liste binaire d entiers qui sont les rangs partir de 1 dans Liste des l ments que l on veut s lectionner Mettre si aucun l ment n est s lectionn au d part InTop C est le rang de l l ment qui doit appara tre tout en haut de l affichage de la bo te scrolling initial On peut mettre 1 par exemple OutsSel Donne en sortie la liste des rangs des items s lectionn s m me convention que pour InSel OutTop Donne en sortie le rang du premier item visible tout en haut de la bo te de choix op D crit l op ration r aliser 4 possibilit s 488 ProloglA Bolig Primitives graphiques lt 0 gt Dessine seulement pas de saisie possible lt 1 k gt Dessine et prend la main jusqu ce qu un v nement de type entr e de caract re ou clic l ext rieur de la liste se p
191. Us ge dela OS nn itnchmaitalmientnnsa 478 R gles pour manipuler les fen tres l aide du clavier et de la SOURIS aana ee dedans et AA E E TERR 478 Rep rage de la souris 479 5 Modes de dessin et d criture his eurent 481 6 Primitives sp ciales de lecture et d criture 485 Simulation d boutons manne E E a ag 485 Saisie de texte i reiso uaii en a tien A a aedi 486 Boites de chikni nornon a EE LEA R N 489 IMpressi n de fen tres riiete ie nt i E 492 7 Primitive de description de menus ssss ssessssersssessesessesesseseesessesi 493 8 Gestion des bo tes de dialogue suisse 498 D finition d un dialogue standard 498 Extensions utilisateur 510 de Bout ns AC Had nn na aa eiii 515 10 Primitives de manipulation de fichiers 516 Index des primitives graphiques unes 519 ANNEXES nr er dim niennnnin nn anss 523 A Liste des messages d erreur de Prolog III 523 B Liste des r gles pr d finies par cat gorie 529 R gles pr d finies Prolog III 529 Arbres listes cha nes et tuples 529 Contr les iles ennemie nt nent en dass ee dresse 529 Contraintes num riques 530 CONV TSION LE LE E nn tn 530 Environnement nus N a a a a 530 Entr es Sorties ssl E EREA EE AAE EOIN aD 531 Gestion des r gles et des identificateurs 532 V rification de t
192. VTUPLE 1010 teste lt VCONTR 1010 teste VIRG 1010 CUT 700 EGAL 650 DIFF 650 IMPLIQUE 650 On appelle ici contexte le sommet d une pile de caract re vide au d part Prolog IA 447 Syntaxes O 5 pag O 448 DEUXPTS TYPTUPLE TYPBOOLT TYPBOOL TYPNUMT TYPNUM TYPCHART TYPCHAR TYPIDT TYPID TYPFREEZE TYPFREEZE Nom Interne INF INFEG SUP SUPEG EQUIV BARRE aJ ADD2 SUB2 ET MULT DIV ADD1 SUB1 NON CONC TUPLE TUPLE GENERAL GENERAL LISTE ED LISTE ED FONCTION FONCTION PARENTH PARENTH PARENTH NUMVAR ENTIER xfx xf xf xf xf xf xf xf xf xf xf Type xfx xfx xfx xfx yfx xfx yfx yfx yfx yfx yfx 650 650 650 650 650 650 650 650 650 650 650 10002 650 10002 Pr c op Pr c bis 650 650 650 650 600 1002 500 500 500 400 400 400 200 200 200 PrologIlA empile z d pile z Action empile lt d pile lt empile c d pile c empile d pile empile d pile empile d pile Bolig Bolig Syntaxes ident carac bool en cha ne lt gt flottant flottant variable f 2 f 2 f 2 f 2 f 2 f 2 f 2 f 2 f 1 On peut constater que certains op rateurs se retrouvent sur deux lignes avec des types ou pr c dences diff rentes Par exemple entier peut tre un op rateur pr fix produit par d faut d un nombre et d une variable en l occurence Ce
193. X P P lt 100 Compte tenu des contraintes la derni re r gle donne lieu aux r gles sur des arbres cadeau pas cher poisson seche gt cadeau poisson seche prix poisson seche 40 62 ProloglA Bulag Bolig Concepts de base cadeau_pas_cher chocolats gt cadeau chocolats prix chocolats 90 cadeau pas cher vin gt cadeau vin prix vin 50 et puisque cadeau chocolats prix chocolats 90 cadeau vin et prix vin 50 sont des faits on en d duira que cadeau _pas_cher chocolats et cadeau pas cher vin sont eux aussi des faits Ce programme d finit donc l ensemble de faits prix fleurs 120 prix chocolats 90 prix vin 50 prix poisson seche 40 cadeau chocolats cadeau vin cadeau fleurs cadeau pas cher chocolats cadeau pas cher vin Seuls les deux derniers de ces faits n taient pas explicites Ex cution d un programme Nous venons de montrer quelle est l information implicite contenue dans un programme Prolog II Examinons maintenant en quoi consiste son ex cution par la machine Cette ex cution vise r soudre le probl me suivant tant donn s une suite f1 t2 tn de termes et un syst me S de contraintes trouver les valeurs des variables qui transforment les termes t en des faits d finis par le programme et les contraintes de S en des conditions verifi es Ce probl me sera soumis la machine sous la forme d une requ te ti t2
194. Y 1 5 X 10 3 Y 3 2 set config format out num Fdecimal XxX 120 36 Y 1 5 Ho M rl es set config format out num Ffloat Xx 120 36 Y 1 5 x 3 333333333333333e 00 Y 1 500000000000000e 00 set config format out num Fint fract Xx 120 36 Y 1 5 3 1 3 Y 1 1 2 format_decimal e Un entier compris entre 0 et 7 repr sentant le nombre de chiffres affich s apr s le point partie d cimale Cette option est utilis e quand l option format_out_num est positionn e Fdecimal Valeur par d faut 3 epsilon_float e Nombre flottant compris entre 10 4 et 10 12 repr sentant l intervalle de tol rance relatif admis lors de la comparaison de nombres flottants Valeur par d faut 10 7 statistics e 0 Pas de statistiques e 1 Affiche les statistiques li es l ex cution Valeur par d faut 0 Voir galement e set_configuration get_config get_configuration e echo no_echo trace no_trace debug no_debug e edinburgh prologlll PrologIA 343 Ed L a La Ed ANA R gles pr d finies et proc dures externes e set_configuration U Fonction Modification de certains param tres Classe Proc dure externe Prolog II Cat gorie Environnement Param tres connus U Messages d erreur Non Description M me fonctionnalit que set_config mais U est un tuple de doublets lt champ valeur gt On peut donc sp cifier les
195. a fonte 472 482 483 484 taille de la police de caract res 468 tailles 76 retard es 151 tan 173 370 tell 404 termes 35 connus 148 sans variable 37 syntaxe 435 447 450 t te de r gle 60 told 405 trace 340 362 1008 trace_file 363 true 406 trunc 106 172 364 369 TTY 467 489 tty_wrap 342 tuple 81 365 ProloglA 1041 Index G n ral tuples 12 22 71 76 W U window 497 undef_array 366 write 408 undefined_rule 343 writeq 409 error 343 fail 343 warning 343 unit s d entr e sortie 192 user_item 510 userltem 510 UserRule 1012 1015 1022 userrule c 1011 V val 169 367 abs 369 add 368 atan 370 cos 370 div 368 eql 369 exp 370 if 369 inf 369 infe 369 In 370 mod 369 mul 368 rad 370 sin 370 sqrt 370 sub 368 sup 369 supe 369 tan 370 trunc 369 valeurs bool ennes 25 var 407 variables 34 d carts 104 syntaxe 433 443 1042 ProloglA Pely LISE PITA T HERITAGE Prolog III Version 1 3 Manuel de mise au point PrologilA Garantie et responsabilit s ProloglA n offre aucune garantie expresse ou tacite concernant ce manuel ou le logiciel qui y est d crit ses qualit s ses performances ou sa capacit satisfaire quelque application que ce soit ProloglA ne pourra tre tenue responsable des pr judices directs ou indirects de quelque nature que ce soit r sultant d une imperfection dans le programme ou le manuel m me si elle a
196. a mani re suivante Pour avoir au plus un l ment vrai dans une liste de t te b1 et de queue 1 la premi re contrainte v rifier est que le et de la t te et du ou de la liste soit faux Il faut cependant que cette contrainte s applique galement r cursivement sur chacune des sous listes auxquelles on a enlev la t te de la pr c dente Par exemple si on consid re une liste de cinq l ments on aura b1 amp b2 b3 b4 b5 0 b2 amp b3 b4 b5 0 132 ProloglA Bulag Pol Les contraintes bool ennes b3 amp b4 b5 0 b4 amp b5 0 Voici donc une autre criture possible AuPlusUnVrai L gt OuSurAuPlusUnVrai L b OuSurAuPlusUnVrai lt gt 0 gt OuSurAuPlusUnVrai lt bl gt L b1 b2 gt OuSurAuPlusUnVrai L b2 b1 amp b2 0 Avec les m mes exemples d ex cution que pour l exemple pr c dent gt AuPlusUnVrai lt 1 b2 b3 gt b2 01 p3 2 0 gt AuPlusUnVrai lt b1 0 b2 gt bl amp b2 0 K l ments vrais dans une liste de n bool ens Voici enfin un dernier exemple de manipulation de contraintes sur des listes de bool ens Dans le programme suivant le pr dicat vrais k L b a t construit de fa on ce que la valeur bool enne de b soit celle de l expression la liste de bool ens L contient exactement k l ments vrais ProloglA 133 Les contraintes bool ennes Vrais k lt g
197. a primitive edit permet d diter un ou plusieurs paquets de r gles et r ins re les r gles modifi es dans Prolog III apr s avoir d truit les r gles devenues obsol tes L argument I peut avoir toutes les formes d crites pour la primitive list c est dire s d signe une cha ne de caract res i un identificateur a un entier et v une variable s i bis lt i a gt lt i v gt lt v 4 gt Tous les paquets de r gles du module correspondant au pr fixe s Le s paquet s de r gles ayant i pour acc s in Tous le s paquet s de r gles ayant iq pour acc s puis le s paquet s ayant i2 pour acc s etc Tous les paquets de r gles du module correspondant au pr fixe par d faut v est unifi avec une liste de doublets de la forme lt ident arit gt Toutes les r gles composant le paquet de nom i et d arit a Toutes les r gles dont l acc s est i quelque soit leur arit Toutes les r gles d arit a appartenant au module ayant le pr fixe par d faut du contexte de lecture et criture courant Liste de doublets de l une des trois derni res formes Pour les syst mes disposant d un ou plusieurs diteurs h tes on se r f rera la section Manuel d utilisation pour positionner la variable d environnement PrologEdit permettant de choisir son diteur pr f r 242 PrologIA Bulag Bolig R gles pr d finies et proc dures externes end_module P Fo
198. ables bool ennes utilis es et les propositions pr sentes dans les phrases pr c dentes et pose les contraintes portant sur ces variables Possibilite lt lt a avoir l esprit clair gt lt b avoir re u une bonne ducation gt lt C discourir sans cesse gt lt d employer son influence des fins m ritoires gt affich dans les vitrines gt un bienfaiteur du peuple gt lt e tre lt f tre apte tre d put gt lt g tre lt h tre digne d loges gt lt i tre populaire gt lt j tre lt k tre une femme gt sans pr tention gt lt l laisser un souvenir imp rissable gt lt m poss der une influence gt lt n savoir garder un secret gt lt O s exprimer bien gt lt p valoir son pesant d or gt gt gt amp c gt g a amp o gt b k amp h gt n g amp d gt f p amp h gt j g amp d gt h i amp p gt n e amp f gt h n amp j gt g amp l k amp g gt i p amp c amp l gt e k amp a amp b gt f n amp c gt i a amp m amp d gt g g amp j gt e n amp d gt p O amp m gt k i amp h gt g j Le reste du programme v rifie que la liste fournie en entr e est un sous ensemble de la liste donn e dans Possibilite Les contraintes sont alors mises en place
199. acc s qui ont le m me pr fixe que le pr fixe par d faut du contexte de lecture et criture Par acc s on entend un identificateur qui nomme un objet dans le code r gle fait variable statique ou tableau dictionary L Unifie L avec la liste des pr fixes des modules utilisateurs pr sents en m moire dictionary so to so tant une cha ne de caract res cette primitive unifie t avec la liste des r gles de la famille correspondant au pr fixe so Chaque r gle est repr sent e par un couple lt acc s arit gt Modules Dans un programme donn et un moment donn on appelle module p le regroupement de tous les faits et r gles les fonctions valuables les variables statiques ou identificateurs affect s par assign et les tableaux dont le nom appartient la m me famille p c est dire poss de le m me pr fixe p que nous appellerons le pr fixe du module Les identificateurs de la famille p peuvent appara tre dans d autres modules mais pas en position d identificateur d acc s c est dire comme nom de pr dicat de t te d une r gle La notion de module est dynamique lorsqu une nouvelle r gle est cr e ou supprim e le module correspondant son identificateur d acc s est modifi en cons quence Un module peut exister sous forme de texte avant lecture ou sous forme interne apr s lecture on parlera de module source et de module objet pour d signer l un et l autre cas
200. acintosh Sur Disquettes Il faut disposer d au moins deux lecteurs Mettre sur la disquette syst me le fichier initial3 psv et sur une nouvelle disquette une copie des autres fichiers dits indispensables Vous devez d marrer partir du dossier contenant initial3 psv en le cliquant par exemple 2 Utilisation de Prolog Ill Activation de Prolog Ill Pour commencer une session ouvrez l application Prolog II ou bien un document qui lui est associ initial3 psv par exemple ou bien un fichier texte ou module cr e par une pr c dente session Dans tous les cas le r pertoire par d faut c a d celui pour lequel les fichiers n auront pas besoin d avoir un nom complet est celui dans lequel on a s lectionn le ou les documents ouvrir ou cliquer Pour terminer une session ex cutez sous Prolog II la requ te quit ou bien choisissez l item Quit du menu Fichier Param trisation de l interpr te Prolog Ill Si vous souhaitez activer Prolog III en redirigeant les entr es sorties ce qui suppose une utilisation non interactive de Prolog II ou bien en fixant des param tres d ex cution qu on modifie rarement il vous suffit de cr er un fichier prolog3 prf dans le dossier contenant l application Prolog IN Ce fichier doit contenir une ligne de texte qui poss de en r alit la syntaxe et la signification de la commande qui activerait Prolog II dans un environnement de type UNIX Seule la premi re ligne du fichi
201. al1 e a amp b lt gt a j b e a b amp a lt gt b amp a 0 Contraintes bool ennes Pour repr senter des contraintes bool ennes on se donne d autre part les symboles relationnels suivants Relations binaires n gal diff rent gt implique On remarquera que implique est aussi en Prolog II une relation En tant qu op ration cela permet souvent de simplifier l criture des expressions mais on prendra garde de bien la discerner de la relation implique On peut galement imposer un arbre b d tre tiquet par une valeur bool enne en utilisant la contrainte una ire suivante b boolt On peut enfin imposer un arbre b d tre r duit une feuille et tiquet par une valeur bool enne en utilisant la contrainte unaire suivante b bool 120 ProloglA Bulag Les contraintes bool ennes Une contrainte bool enne est soit la relation unaire qui impose une variable de repr senter un arbre tiquet par un bool en soit une relation entre deux expressions bool ennes Remarques importantes Tout d abord il est noter que par sa d finition m me une contrainte est ou n est pas v rifi e et qu en particulier celle ci ne renvoie pas une valeur bool enne On prendra donc garde de ne pas utiliser des expressions pour des contraintes et inversement Ainsi l expression a amp b n est pas une contrainte de m me qu il n est pas correct d crire a gt 0
202. alement e tuple PrologIA tuple 281 R gles pr d finies et proc dures externes Bulag is_univ T Fonction V rifie que le terme T repr sente un arbre non typ Classe R gle pr d finie Prolog II Cat gorie V rification de types Param tres connus Aucun Messages d erreur Non Description R ussit si le terme T n est pas typ caract re identificateur num rique bool en tuple ou liste binaire Exemples 282 is univ X is univ ElUI l E 0 U tuple is univ arbre 1l A is _univ X A B C X num is_univ ident is_univ 1 2 3 is_univ 2X 4 is_univ B B bool PrologIA Bolig R gles pr d finies et proc dures externes kill module S Fonction Suppression des r gles d un module Classe R gle pr d finie Prolog MI Cat gorie Gestion des r gles et des identificateurs Param tres connus sS Messages d erreur Pas d identificateur avec ce pr fixe Description Supprime toutes les r gles du module d sign par la cha ne de caract res S Les tableaux du module sont d sallou s et les assignations des identificateurs du module sont d faites Exemple essail gt essai2 gt assign essai3 0 list val essai3 x essail gt essai2 gt x 0 kill module list val essai3 X X essai Voir galement e new PrologIA 283
203. amment importante pour motiver un d clenchement automatique du r cup rateur de m moire Voir galement e state ProloglA 255 2 gens 2 Boli R gles pr d finies et proc dures externes L ecd N1 N2 N3 Fonction Calcul du plus grand commun diviseur Classe R gle pr d finie Prolog II Cat gorie Contraintes num riques Param tres connus N1 N2 Messages d erreur Non Description Pose la contrainte N3 N3 o N3 est le plus grand commun diviseur des entiers N1 et N2 Le plus grand commun diviseur calcul ne tient pas compte du signe gcd choue si N1 et N2 ne sont pas connus ou pas entiers Exemples gt gcd 24 16 P gt gcd 24 16 P P 8 Voir galement e Icm pgcd ppcm 256 ProloglA Bolig R gles pr d finies et proc dures externes get_config S V Fonction Etat courant de configuration Classe Proc dure externe Prolog II Cat gorie Environnement Param tres connus Aucun Messages d erreur Non Description Si S est une cha ne pose la contrainte V S o S est la valeur courante associ e au champ S Sinon get_config num re par backtracking les champs possibles pour S et leur valeur courante pour V Pour la liste compl te de ces champs et de ces valeurs on se reportera aux explications donn es set_config Exemple gt get _ config syntax sS S Edimbourg Voir gal
204. ans l univers Prolog III ce nombre relais et le nom de la nouvelle r gle cela se fait l aide de la primitive set_ident nom de la r gle num ro Ult rieurement il faudra sauvegarder cette d claration dans une nouvelle version du fichier initial3 psv qui jouera par la suite le r le d tat initial enrichi e associer dans l univers C le nombre relais et l appel de la fonction qui constitue l implantation effective de la nouvelle r gle Cela se fait en ajoutant un cas la table d aiguillage qui se trouve dans le module userrule c et en recompilant ce module e d finir l implantation externe en C ou Fortran ou tout autre langage externe compatible de la r gle en question et la compiler Il faut enfin faire l dition de liens entre le programme externe et les modules objets qui constituent Prolog III pour produire un ex cutable contenant la nouvelle r gle ProloglA 1011 Utilisation de Prolog III sur Macintosh Appel d une r gle externe L interface entre la forme Prolog III d une r gle externe et son implantation effective dans un autre langage est r alis e par une fonction qui constitue l essentiel du fichier userrule c et qui poss de l en t te suivant long UserRule Ptr_vers_PEV Num_ident_du_PEV char Ptr_vers_PEV long int Num_ident_du_PEV Le listing du fichier userrule c se trouve la fin de ce chapitre Vous devez savoir que pour ex cuter une r gle externe Prolog
205. antenne ie 438 R gles et fequ t s s sise e a e a e a E aR eN 440 Quelques r marques yirs naenin EE E EEA KEE EE 441 Caract re espat sgh esse i a iA 441 Continuation de ligne 442 Les diff rents commentaires 442 3 Syntaxe d EdNbOURE nl A nat aE ah 443 Variables te O nee Sn A ee ram 443 Id ntificate rs nn aea Sn nee Pen Nr enter trnente ae 444 TEMES EE ant E E tem nn ane unes dose de door ann ne dont 0e Er 445 Op rateurs nn en nee Late a net Ana en dinde 445 ICS T TM S ARE Ste qe Re eee an ne 447 Expressions num riques 451 Expressions b cl enn s s sssssnttnesrstes 452 Arbres et T rmes istsoterarhrenn sd ture nniehe crade 452 Cofitraintes oie ata a en a a a e EE 453 R gl s et requ tes sus aE E AE E EE E 456 Quelques r marques ss antennes EE E EES 458 Caract re espaces initie A mire dm des nee a Eaa 458 C tmuation de Hgn sise e A E AE 458 Les diff rents commentaires 459 Op rateurs Edimbourg sssssmensesssssrenesniisnssses 459 Etf ng t s nt ren Re tre le ler Mere 459 4 Remarques g n rales sion iaiia 460 Diff rences des modes 460 Cohabitation des deux Syntaxe Miss tn 461 Primitives Graphiques sieste ententes 463 1 Introduction conventions an ts ss 464 2 Primitives de gestion des fen tres siennes 466 Rafra chissement de la fen tre graphique 473 3 Dessin et positionnement inst inner enps hle 473 PrologIA ix Table des mati res Prelog 4
206. ardements concept demande que l on s attarde sur la signification du terme connu De plus certaines contraintes qui ne v rifient pas les restrictions impos es par Prolog II sont automatiquement retard es Ce chapitre propose un tour d horizon de ces diff rents retardements ainsi qu un certain nombre d exemples On conservera l esprit que la notion de contrainte retard e sort du cadre formel de Prolog III en fournissant un outil qui s il s av re agr able l utilisation ouvre la voie une programmation sem e d emb ches 2 Termes connus La d finition d un terme connu est tr s pr cise en Prolog II Un terme est connu lorsque l on connait l tiquette de l arbre qu il repr sente et que l on sait si son nombre de fils est nul ou non Souvent ces termes sont r duits une variable et on parle alors de variable connue Les pr dicats valuables known bound et free Les trois pr dicats valuables suivants ont un rapport direct avec ce que l on sait au cours de l ex cution d un programme propos d un terme donn known T s ex cute avec succ s si T est un terme connu au sens de la d finition pr c dente 148 ProloglA Bolig Bolig Retardements bound T s ex cute avec succ s si T est un terme repr sentant un arbre dont e L tiquette initiale est connue e Le nombre des fils est connu free T s ex cute avec succ s si l on ne connait pas l tiquette de l arbre repr
207. ateurs Param tres connus Voir ci apr s Messages d erreur Argument de mauvais type R gle inexistante Description Liste sur l unit courante de sortie la r gle num ro N du paquet correspondant au nom I et l arit nombre d arguments A Chacun des param tres I A ou N peut tre repr sent par une variable 292 ProloglA Bolig R gles pr d finies et proc dures externes list_string L S Fonction Conversion liste cha ne Classe R gle pr d finie Prolog MI Cat gorie Conversions Param tres connus 2 Messages d erreur Non Description Pose la contrainte S L o L est une cha ne compos e des caract res qui forment la liste L Exemple gt list string l H X Hello Voir galement e split PrologilA 293 R gles pr d finies et proc dures externes Bulag list_tuple L U Fonction Classe Cat gorie Param tres connus Messages d erreur Conversion liste tuple R gle pr d finie Prolog MI II Conversions SE Non Description Pose la contrainte S U o U est un tuple compos e des l ments qui forment la liste L Exemple gt list tuple 1 12 aaa l rhino X X lt 1 12 aaa 1 rhino gt gt list tuple li 2 3 X CX ML ST lc Voir galement e split 294 PrologilA Bolig R gles pr d finies et proc dures externes
208. ation est donc produite et l ensemble de contraintes simplifi en rempla ant c par 1 dans chacune des contraintes de la requ te Examinons pr sent le m canisme de suppression des variables inutiles Voici tout d abord la d finition de l quivalence sur un sous ensemble de variables Deux syst mes de contraintes sont quivalents sur un sous ensemble de variables V si et seulement si pour toute solution X de l un il existe une solution X de l autre qui co ncide avec X sur V et vice versa En particulier pour les sorties on cherchera exhiber un syst me quivalent sur un sous ensemble V g n ralement l ensemble des variables figurant dans la requ te qui ne contienne que des variables de V On parlera parfois ce propos de projection sur un sous vocabulaire Les contraintes pr sentes PrologIA 127 Les contraintes bool ennes dans ce syst me fourniront les liens qui unissent les variables consid r es dans le syst me courant La n cessit d une telle fonctionnalit est double Tout d abord il arrive et nous en verrons des exemples que l on ne s int resse qu aux liens qui unissent certaines des variables sur lesquelles on a fait porter des contraintes par exemple quels sont les liens entre les diff rentes pannes possibles dans une configuration donn e dans un syst me expert Ensuite de mani re transparente pour l utilisateur l interpr teur cr e constamment de nouvelles variables
209. au courant de la d monstration sous la forme approximative d une r gle avec indication du niveau du corps de la r gle et de la position de l appel courant boite courante au sein de cette r gle Cette position est indiqu e par le caract re Quand un nombre est donn en argument celui ci d signe le nombre de niveau que l on souhaite voir affich ligne par ligne partir du bas de l arbre de d monstration dans l ordre des niveaux d croissants Le niveau 0 correspond l appel virtuel du but query dont le corps de r gle serait la requ te tap e par l utilisateur Un point d arr t pas les points espions est not au moyen du caract re plac devant le litt ral o il a t install Notons que l interpr tation de l affichage du niveau affich en premier d pend du port courant le peut tre avant ou apr s un appel selon le port correspondant cet appel gt aa x gt bb x cc x gt bb x gt eq x 1 gt aa u 11 1 CALL aa u DBG s 1 1 RULE r1 aa u aa x 1 DBG 1 1 ok r1 aa u DBG 2 2 CALL bb u DBG 2 2 RULE r1 bb u bb x 2 DBG 2 12 1 ok r1 bb u DBG 3 3 CALL eq u 1 DBG 3 3 EXIT r1 eq 1 1 DBG locus 3 bb 1 gt eq 1 1 DBG locus 10 3 bb 1 gt eq 1 1 2 aa 1 gt bb 1 ecc 1 1 aa 1 0 squerys e DBG 1 Ce caract re d pend de l implantation 2012 ProloglA Bolig
210. avec T et la queue avec Q Si une telle r gle n existe pas alors rule T Q produit une erreur Exemple gt list conc L L gt conc A L L A L gt conc L L L gt rule conc X Y Z Q ME o A v149 v150 Z v149 v151 conc v150 y v151 gt rule concatener X Y Z Q gt Remarque T doit tre de type idt ProloglA 333 Ed L ka Ed ANA R gles pr d finies et proc dures externes n rule N T Q Fonction Recherche de r gles Classe R gle pr d finie Prolog MI I Cat gorie Gestion des r gles et des identificateurs Param tres connus SiL Messages d erreur R gle inexistante Description Recherche des r gles correspondant un mod le donn Cette primitive recherche la r gle dont la t te s unifie avec T la queue avec Q et qui est de rang N dans son paquet Si une telle r gle n existe pas alors rule N T Q produit une erreur Exemple gt list conc L L gt conc A L L A L gt conc L L L gt rule 2 conc X Y Z Q X v149 v150 Z v149 v151 conc v150 y v151 Remarque T doit tre de type idt 334 ProloglA Bolig R gles pr d finies et proc dures externes rule N A T Q Fonction Recherche de r gles Classe R gle pr d finie Prolog MI Cat gorie Gestion des r gles et des identificateurs Param tres connus A Messages d
211. b ProloglA 121 Les contraintes bool ennes Dans cet ordre d id es on notera que si a est une variable bool enne la contrainte a b l arbre repr sent par la variable a est diff rent de celui re pr sent par la variable n impose en aucun cas b de repr senter une valeur bool enne En particulier sa simple non appartenance au domaine des bool ens suffit v rifier la contrainte Ensembles de contraintes bool ennes Comme nous l avons d j vu dans le cas g n ral les syst mes de contraintes bool ennes sont des ensembles dont toutes les contraintes doivent tre v ri fi es simultan ment On remarquera cependant qu il existe souvent plusieurs critures possibles le connecteur et implicite liant ces contraintes pouvant appara tre comme op rateur explicite dans une contrainte quivalente Par exemple on pourra crire indiff remment e a 1 b 1 c 1 ou agb amp c 1 e a gt c c alb ou alc amp c lt gt alb 1 Toutefois pour des raisons d efficacit afin d viter un pr traitement trop co teux on aura souvent int r t pr f rer de grands ensembles de contraintes simples des syst mes constitu s de peu de contraintes com plexes Exemples de contraintes bool ennes Voici quelques exemples de contraintes bool ennes correctes ainsi que des ensembles de contraintes qui leur sont quivalents a va 1 Cette contrainte est toujours v rifi
212. bleu gt taille grand gt taille petit gt 1 En accord avec la syntaxe d Edimbourg la coupure peut se noter aussi 164 ProloglA Bulag Bolig L environnement gt choix1 u u rouge grand u rouge petit u bleu grand u bleu petit u c est tout gt choix2 u u rouge grand u rouge petit u bleu grand u bleu petit gt choix3 u u rouge grand u rouge petit gt choix4 u u rouge grand gt choix1 u u rouge grand gt taille y taille y taille y choix1 x y gt couleur x choix1 c est tout choix2 x yl gt couleur x choix2 c est tout choix3 x y gt couleur x choix3 c est tout choix4 x y gt couleur x choix4 c est tout On peut consid rer la coupure comme une annotation que l on fait un pro gramme juste pour le rendre plus efficace bien entendu cela ne se justifie que si on ne s int resse qu la premi re solution fournie par ce programme Voici quelques utilisations classiques du Premi re solution uniquement premiere_solution_uniquement b gt b Si alors sinon si_alors_sinon p a b gt p a si_alors_sinon p a b gt b ProloglA 165 L environnement n n non non p gt p fail non p gt Dans le cas de non montr
213. bre de fils du n ud initial Inumt chart lboolt D D D lidt Ces conditions sont v rifi es si le n ud initial de l arbre a est tiquet par respectivement un nombre un caract re un bool en un identificateur Aucune condition n est impos e pour les autres n uds a tuple Cette condition est v rifi e si le n ud initial de l arbre a est lt gt autrement dit si a est un PIll tuple Aucune condition ne doit tre v rifi e par les autres n uds Cette condition se lit n est un nombre entier non n gatif et du n ud initial de a partent n branches Souvent mise en conjonction avec la pr c dente elles quivalent alors ensemble a est un tuple de longueur n Inum char lbool D D D lid PrologIA 53 Concepts de base Prelog Ces conditions sont v rifi es si a est une feuille et si son unique n ud est ti quet par un nombre resp un caract re un bool en un identificateur Par cons quent a num quivaut a numt et a 0 a char quivaut a Ichart et a 0 a bool quivaut a boolt et a 0 a lid quivaut a lidt et a 0 7 Contraintes De la m me mani re que nous sommes pass s des arbres aux termes nous allons passer des conditions aux contraintes Une condition tait constitu e par l application d une relation entit math matique un arbre ou un couple d arbres l ments du domaine de Prolog II Une contrainte sera un objet syntax
214. ccuper de son tat initial Les op rations Or Xor et Bic laissent inchang s les pixels de destination situ s sous la partie blanche du motif ou de la source Elles traitent diff remment les pixels situ s sous la partie noire Or ajout les remplace par des pixels noirs Xor inversion les remplace par leur contraire Bic effacement les remplace par des pixels blancs Suivant le mode l op ration est r alis e partir du motif lui m me src ou bien partie de son inverse notSrc Voici les valeurs de m pour les diff rents modes m__ modes de transfert srcCopy srcOr srcXor srcBic notSrcCopy notSrcOr notSrcXor NS OO amp NN notSrcBic gr text f t s Permet de d finir la fonte la taille et le style des sorties dans la fen tre graphique courante f num ro de la fonte t taille de la fonte s liste de num ros de style 482 ProloglA Bolig Primitives graphiques N fonte N style 0 systemFont 0 gras 1 applFont 1 italique 2 newYork 2 soulign 3 geneva 3 relief 4 monaco 4 ombr 5 venice 5 condens 6 london 6 tal 7 athens 8 san Franscico La liste binaire vide pour s repr sente le texte normal La combinaison par d faut est gr_text 4 12 Par exemple gr_text 3 18 1 3 4 correspond geneva taille 18 italique relief et ombr Il est possible d appeler cette r gle en donnant en argument des identificateurs auxquels on a assign les constantes a
215. ccurrences du caract re seule la derni re est prise en consid ration par Prolog II comme s parateur du pr fixe et de l identificateur abr g Le pr fixe est alors compos de plusieurs mots s par s par des Si cela correspond une organisation hi rarchique dans l esprit du programmeur ce fait reste tranger Prolog III pour qui les familles associ es des pr fixes comme par exemple aa et aa bb n ont pas de lien particulier On appelle module l ensemble des l ments de code nomm s par les identificateurs d une famille donn e Par l ments de code nous entendons bien s r les faits et les r gles Prolog IIT qui constituent les programmes mais aussi les fonctions valuables les variables statiques et les tableaux 1 C est dire les identificateurs auxquels on associe une valeur par la primitive assign PrologIA 177 L environnement Partie ferm e d une famille Les notions de famille et de module sont tout fait dynamiques chaque nouvel identificateur lu et ventuellement compl t par Prolog III est incorpor automatiquement la famille correspondant son pr fixe Une famille n est jamais fig e elle peut tout moment tre augment e par l ajout de nouveaux identificateurs Ce dynamisme est en g n ral fort appr ciable mais nous allons voir que lors de la d finition des contextes de lecture et criture voir ci dessous une certaine stabilit est aussi
216. ce niveau lt caract re d sign gt lt lettre sauf x gt lt caract re sp cial gt lt chiffre octal gt lt chiffre octal gt lt chiffre octal gt lt chiffre octal gt lt chiffre octal gt lt chiffre octal gt x lt chiffre hexa gt lt chiffre hexa gt x lt chiffre hexa gt Si le caract re gt est suivi d un retour chariot celui ci est ignor aucun caract re d un entier compos de trois chiffres octaux au plus le caract re d sign repr sente le caract re dont le code ASCII est cet entier en base 8 dela lettre x et d un entier compos de deux chiffres hexad cimaux au plus le caract re d sign repr sente le caract re dont le code ASCII est cet entier en base 16 430 ProloglA Poly zi Syntaxes d un des caract res du clavier alors on a la correspondance suivante entre les caract res d sign s et les caract res qu ils repr sentent rubout ASCII 8 tabulation i 9 linefeed 10 ormfeed 11 formfi return 13 newline 10 ou 13 machine n 27 Pour tout c n appartenant pas l ensemble des caract res n e 1 r t b x la s quence c d signe le caract re c En particulier repr sente et le caract re ce qui permet notamment leur utilisation l int rieur des cha nes Nous pouvons maintenant d finir ce que sont une constante caract re et une cha ne de caract res lt constante caract r
217. ce sont des objets dont la valeur peut parfaitement tre inconnue Ainsi les expressions num riques ne sont g n ralement pas valu es les valeurs de suffisamment de variables n tant pas connues mais forment les principaux composants des contraintes num riques trait es par le langage au niveau de l unification Ce traitement consiste principalement v rifier si l ajout de ces contraintes ne rend pas le syst me insoluble ainsi qu effectuer un certain nombre d autres traitements sur lesquels nous reviendrons par la suite 2 G n ralit s Les nombres Les contraintes num riques de Prolog II portent sur deux types d objets les nombres rationnels et les nombres flottants Les nombres rationnels sont repr sent s dans la machine en pr cision par faite c est dire avec autant de chiffres que leur expression exacte le requiert En fait tout rationnel est cod sous la forme d un nombre fractionnaire irr ductible par un couple d entiers en pr cision parfaite qui repr sentent son num rateur et son d nominateur Ainsi Prolog III garantit l unicit de la repr sentation de tout nombre rationnel les nombres 3 9 2 6 et 1 3 repr sentent le m me nombre rationnel et sont cod s sous la 94 ProloglA Bulag Bolig Les contraintes num riques forme 1 3 Pour conserver cette unicit de la repr sentation un module arithm tique en pr cision parfaite a t int gr Prolog III En ce qui conce
218. ci dessus 306 ProloglA Bolig R gles pr d finies et proc dures externes numden R N1 N2 Fonction Calcul du num rateur et du d nominateur d un rationnel Classe Proc dure externe Prolog II Cat gorie Contraintes num riques Param tres connus R Messages d erreur Non Description Pose les contraintes N1 N1 N2 N2 o N1 est le num rateur de R et N2 le d nominateur de R Echoue si R n est pas connu Exemples numden 17 N1 N2 E Ni esT numden 9 6 N1 N2 N1 3 N2 numden R 14 2 ProloglA 307 2 gens 2 Bol R gles pr d finies et proc dures externes L out T Fonction Ecriture de termes Classe R gle pr d finie Prolog II Cat gorie Entr es sorties Param tres connus Aucun Messages d erreur Non Description Ecrit le terme T sur l unit de sortie courante sans les contraintes associ es aux variables qui peuvent figurer dans ce terme Voir galement e outc outl outm outml 308 ProloglA Bolig R gles pr d finies et proc dures externes outc T Fonction Ecriture de termes avec contraintes Classe R gle pr d finie Prolog II Cat gorie Entr es sorties Param tres connus Aucun Messages d erreur Non Description Ecrit le terme T sur l unit de sortie courante avec les contraintes associ es aux variables qui peuvent figurer dans ce terme Voir galeme
219. coch 494 J jeu de caract res 427 K kill_button 515 kill_module 12 191 283 kill_window 472 known 148 284 known_part 81 152 285 L lcm 286 ligne de texte ditable 501 ligne de texte non ditable 500 line 197 287 linefeed 431 list 7 9 11 189 288 list_string 86 293 list_tuple 84 294 liste vide 84 syntaxe 429 listes 33 83 listing 390 litt ral 124 In 172 370 load_graphic 464 MacDraw 516 machine Prolog III 65 162 MacPaint 516 max_value 105 295 maximum d une expression num rique 105 member 391 menu fugitif 493 menu hi rarchique 493 menu pop up 493 min_value 105 296 minimum d une expression num rique 105 mod 106 171 297 369 MODAL 467 modes de transfert 483 module 24 178 298 objet 186 ProloglA 551 Pely Index source 185 op rateurs 445 module directive 185 bool ens modules quivalent 119 exemples 186 moins unaire 98 motif 482 MPW 489 mul 170 368 mult 105 157 158 299 multiplication 31 98 N naive_reverse 82 name 392 new 300 new_window 467 newline 431 next_char 301 next_char 302 nil 33 nl 393 NLINES 468 no_echo 197 303 no_trace 304 nombres 14 entiers 26 syntaxe 428 flottants 26 94 syntaxe 429 fractionnaires 94 rationnels 94 non 29 119 non pr dicat 166 nonvar 394 not 305 num 106 306 number 395 numden 307 O omission de l op rateur de multiplication 99 op 396 et 119 implique 119 non 119 ou 119 Edimbourg
220. commande implant e par un alias utilisant resol est simplement un raccourci pour indiquer qu on souhaite afficher toutes les r solvantes c a d l ensemble des litt raux en attente d effacement sol tous ports SYNTAXE sol DESCRIPTION Provoque l affichage de l tat courant du syst me de contraintes portant sur les variables de la question C est le format utilis lors de l affichage des solutions Prolog II Si la d monstration courante n aboutit pas on est sur FAIL ou sur no sans autre choix possible la cha ne none est imprim e en place du syst me qui est dans ces cas l insoluble 2014 ProloglA Bulag Bolig Outils de mise au point printbox tous ports SYNTAXE printbox DESCRIPTION Cette commande permet d imprimer la ligne formatt e contenant les informations sur le port courant de la boite courante L alias p est un raccourci de printbox 6 Installer des points d arr t Les points espions sont install s par spy et enlev s par nospy Les points d arr ts proprement dits que l on place dans la d monstration courante sont install s par breakat et enlev s pas unbreak spy tous ports SYNTAXE spy spy identificateur arit DESCRIPTION Cette commande permet de surveiller tous les appels un paquet de r gle Elle ne surveille donc pas un appel particulier comme le fait la commande breakat Sans arguments le nom et l arit du paquet de r gles correspondent ce
221. commandes qui installent ou suppriment des points d arr t spy nospy breakat unbreak e Les commandes permettant de modifier l ex cution d un programme changechpt fail FAIL RULE e Les commandes qui g rent les options du d buggeur set show p4 p7 t1 t2 t3 no_debug kill 2008 ProloglA Bolig Bulag Outils de mise au point e Les commandes class es nulle part ailleurs alias eof flush help source 4 Progression step next n N nextp nextc cont C step tous ports SYNTAXE step DESCRIPTION C est la commande de base pour suivre la progression de l interpr te Elle permet de se d placer petit pas de port en port Seuls les ports d crits dans l option printport sont des points d impression et points d arr t pour step L alias s est un raccourci de step REMARQUE Si l option print est mise 0 step ne fait qu un grand pas seulement interrompu par un ventuel point d arr t next n N tous ports SYNTAXE next n N DESCRIPTION Cette commande permet la progression de l interpr te avec une granularit moins fine que step En particulier next ne rend la main qu une fois atteint un port qui n est pas un niveau sup rieur au niveau courant Les ports interm diaires sont ou ne sont pas imprim s selon la valeur de l option print PrologIA 2009 Outils de mise au point Les points d arr t franchis par le d placement sont actifs ou pas sel
222. connu pose l ensemble de contraintes S B o B est une cha ne form e des caract res qui composent le bool en B Exemples gt string bool S 1l F e gt string bool 0 B o ProloglA 351 Ed L a La Ed ANA R gles pr d finies et proc dures externes n string_ident S I Fonction Conversion d une cha ne en un identificateur Classe R gle pr d finie Prolog MI I Cat gorie Conversions Param tres connus Voir ci apr s Messages d erreur Non Description e Si S est connu pose l ensemble de contraintes I I o I est un identificateur compos des caract res de la cha ne qui le repr sente e Si I est connu pose l ensemble de contraintes S S o S est une cha ne compos e des caract res de l identificateur 1 Exemples gt string ident S histoire valmy S histoire valmy gt string ident histoire valmy I histoire valmy 352 ProloglA Bolig R gles pr d finies et proc dures externes string_ident P S I Fonction Conversion d une cha ne en un identificateur Classe R gle pr d finie Prolog MI Cat gorie Conversions Param tres connus Voir ci apr s Messages d erreur Non Description e Si I est connu pose l ensemble de contraintes S 5 P P o S est une cha ne compos e des caract res de la repr sentation abr g e de l identificateu
223. connus El Messages d erreur Aucun Description Supprime tout le paquet de r gles de nom I Echoue si I est inconnu ou bien s il n existe pas de paquet de r gles convenant Exemples essayons 1 gt essayons 2 gt essayons 1 2 gt essayons X X 1 suppress essayons essayons X essayons X Y ProloglA 357 Ed L a La Ed ANA R gles pr d finies et proc dures externes e suppress I A Fonction Suppression d un paquet de r gles Classe Proc dure externe Prolog M II Cat gorie Gestion des r gles et des identificateurs Param tres connus Tet A Messages d erreur Aucun Description Supprime tout le paquet de r gles de nom I et d arit A Echoue si I ou A sont inconnus ou bien s il n existe pas de paquet de r gles convenant Exemples essayons 1 gt essayons 2 gt essayons 1 2 gt essayons X Exar suppress essayons 1 essayons X essayons X Y LFY 358 ProloglA Bolig R gles pr d finies et proc dures externes suppress I A N Fonction Suppression d une r gle Classe Proc dure externe Prolog IM I Cat gorie Gestion des r gles et des identificateurs Param tres connus L A etN Messages d erreur Aucun Description Supprime la r gle num ro N du paquet de r gles de nom I et d arit A R ussit mais sans rien effacer si aucune r gle ne corres
224. contour du polygone peuvent subsister 3 invert Inverse la couleur de chaque point de l int rieur du polygone Le r sultat est d pendant de la machine si le polygone a un coloriage autre que noir et blanc PrologilA 475 A Primitives graphiques n gr_arc n r a1 a2 gr_arc n x1 y1 x2 y2 a1 a2 Dessine un arc d ellipse inscrit dans le rectangle r entre les angles al et a2 Les angles 41 et 42 sont donn s en degr s Le premier argument n qui repr sente un entier ou un identificateur d termine la proc dure appel e 0 frame Dessine l arc d ellipse 1 paint Rembplit le secteur d fini par l arc d ellipse avec le motif associ au crayon 2 erase Efface l arc d ellipse et le contenu du secteur 3 invert Inverse les bits du secteur d fini par l arc d ellipse Le r sultat est d pendant de la machine si le secteur a un coloriage autre que noir et blanc Exemple gt gr arc frame 100 100 200 170 20 110 a2 x1 y1 ai X2 Y2 12 Cette primitive n est pas encore disponible sous Sunview 476 ProloglA Bolig Primitives graphiques gr_arc n r al a2 gr_arc n x1 y1 x2 y2 a1 a2 Dessine un arc d ellipse inscrit dans le rectangle r depuis l angle al et d une amplitude 42 Les angles a1 et 42 sont donn s en degr s Cette primitive se diff rencie de gr_arc par le fait qu elle correspond exactement la d finition de la Toolbox origine sur l ax
225. cr e n carr s de tailles inconnues tous distincts et lance le remplissage de la zone constitu e par la totalit du rectangle La ligne z constituant la d limitation PrologiA 115 Les contraintes num riques sup rieure de cette zone est inconnue au d part mais compte tenu que cette ligne doit joindre deux points qui se trouvent la m me hauteur et qu elle ne peut descendre ce sera forc ment une ligne horizontale repr sent e par un escalier dont toutes les marches sont de hauteur nulles Si on lance la requ te gt remplir rectangle a C c 9 on obtient 8 r ponses Les deux premi res que voici a 33 32 C lt 15 32 9 16 1 4 7 32 1 8 7 16 1 32 5 16 9 32 gt a 69 61 lt 33 61 36 61 28 61 5 61 2 61 9 61 25 61 7 61 16 61 gt correspondent aux deux assemblages que nous avons dessin s Les 6 autres r ponses d crivent des assemblages sym triques de ceux ci ststs 116 ProloglA Bolig Bolig Les contraintes 1 Introduction 2 Quelques d finitions et remarques Expressions bool ennes Priorit s des op rateurs bool ens Contraintes bool ennes Remarques importantes Ensembles de contraintes bool ennes Exemples de contraintes bool ennes Forme normale conjonctive Affectations bool ennes Solution d un ensemble de contraintes bool ennes Simplification de syst mes de contraintes R gles pr d finies sp cifiques 3 Premiers exemples de progra
226. ct re lui m me La syntaxe compl te des caract res est donn e au chapitre Les syntaxes de Prolog II Les valeurs bool ennes Les valeurs bool ennes sont les deux l ments du domaine de l alg bre de Boole classique 0 1 Nous ne les interpr terons pas en termes de vrai ou de faux r servant ces mots pour parler des contraintes nous dirons qu une contrainte est vraie ou fausse pour indiquer qu elle est ou n est pas satisfaite Les contraintes sont expliqu es ci dessous au 7 ProloglA 25 Bulag Concepts de base Les nombres entiers non n gatifs 0 1 2 1991 815915283247897734345611269596115894272000000000 On notera que les entiers n gatifs ne sont pas consid r s comme des constantes puisqu on peut les exprimer comme r sultat d une op ration le changement de signe appliqu e un entier positif ou nul De la m me mani re les nombres fractionnaires ne sont pas des constantes non plus ils sont repr sent s l aide des op rations de division et de changement de signe appliqu es des entiers Les nombres rationnels sont repr sent s dans la machine en pr cision parfaite c est dire avec autant de chiffres que leur expression exacte le requiert A la condition bien entendu que cela ne d passe pas la taille de la m moire de votre machine Les nombres flottants non n gatifs Exemples 12 345 0 5 314 15926535e 2 1 2E12 La repr sentation interne et donc
227. cuter pour cr er une nouvelle r gle pr d finie implant e par un programme externe Supposons que vous programmiez en C et que vous vouliez ajouter la r gle pr d finie roots a b c x y qui calcule les deux racines r elles x et y de l quation ax2 bx c 0 si elles existent et qui provoque un backtracking sinon S agissant du Macintosh vous devez poss der l atelier de programmation MPW Nous supposerons que c est le cas et que vous connaissez le mode d emploi de ce logiciel Etape par tape la marche suivre est la suivante 1 Cr er le fichier myproc c suivant Hinclude macuser h Hinclude lt SANE h gt real roots a b x y extended a b x y extended d if a d b b 4 a c lt 0 return 0 else x b sqrt d 2 a y b a x return 1 2 Compiler le fichier myproc c C s MYSEGT myproc c 3 Modifier la fonction UserRule du fichier user_rule c en ajoutant l appel du nouveau programme externe Par exemple en donnant le num ro 504 la nouvelle r gle long int UserRule Ptr vers PEV Num ident du PEV adr Ptr vers PEV long int Num ident du PEV 1022 ProloglA Bulag Pelog Utilisation de Prolog IHI sur Macintosh switch Num_ident_du_PEV case 504 adr t extended a b x Y return t GetArg 1 Ptr_vers_PEV amp amp Convert NumP to ExtendedC t amp a amp amp t GetArg 2 Ptr
228. d termin par le pr fixe par d faut du contexte courant Contrairement kill_module les tableaux du module ne sont pas d sallou s et les assignations des identificateurs du module ne sont pas d faites Exemple essail gt essai2 gt assign essai3 10 list val essai3 Xx essail gt essai2 gt list val essai3 X 10 Voir galement e kill module 300 ProloglA Bolig R gles pr d finies et proc dures externes next char C Fonction Lecture anticip e d un caract re Classe Proc dure externe Prolog M II Cat gorie Entr e Sorties Param tres connus Aucun Messages d erreur Non Description Pose la contrainte C C o C est le prochain caract re rencontr sur l unit d entr e courante sans toutefois le lire effectivement Voir galement e in_char in_char in_ident in_integer inl in_real in_sentence in_string in_term next_char ProloglA 301 R gles pr d finies et proc dures externes next char C Fonction Lecture anticip e d un caract re qui ne soit pas un caract re de formatage Classe Proc dure externe Prolog IM I Cat gorie Entr e Sorties Param tres connus Aucun Messages d erreur Non Description Pose la contrainte C C o C est le prochain caract re rencontr qui ne soit pas un caract re de formatage sur l unit d entr e courante sans toutefois le l
229. d entr e Ces r gles lorsqu elles sont valides sont d abord cod es sous une forme canonique puis ensuite d cod es et list es sur la sortie courante Valeur par d faut O undefined _ rule D termine le comportement de l interpr teur lors de l appel d un but non ex cutable e fail Echec Prolog sans message d avertissement ni erreur e warning Echec Prolog avec message d avertissement paquet non d fini ou but non ex cutable e error Produit une erreur Acc s non d fini Valeur par d faut warning interrupt_is_error e 0 e 1 L interruption de programme lt Ctrl C gt sur certaines machines n est pas trait e comme une erreur Prolog Un dialogue d crit dans le manuel d utilisation est pr sent l utilisateur et lui permet de continuer de stopper de tracer l ex cution du programme ou de sortir de la session Prolog L interruption de programme g n re une erreur Prolog avec le message d erreur Err 16 Interruption utilisateur Dans ce cas l interruption peut tre inter cept e par le m canisme de block Valeur par d faut 0 ProloglA 341 R gles pr d finies et proc dures externes syntax e Prolog I Mode syntaxique de type Prolog IM M e Edinburgh Mode syntaxique de type Edimbourg Valeur par d faut Prolog II Remarque Il est possible de se retrouver directement sous le mode syntaxique Edimbourg pour chaque session Prol
230. dans l intervalle 0 1 n est enti re Le processus de retardement ne permet pourtant pas de r aliser l chec auquel on aurait pu s attendre Concat nation retard e La seconde restriction concerne les concat nations de tuples Le retardement de ces contraintes intervient lorsque l on a crit une concat nation dont l op rande de gauche est de taille inconnue PrologIA 153 Bola Retardements wi De la m me mani re que pour les contraintes de taille retard es on peut donner une premi re explication satisfaisante du m canisme mis en place dans ce cas en crivant les r gles Prolog II correspondantes On rappelle que la r gle pr d finie qui met ce retardement en place est conc3 U V W Voici un pr dicat qui constituera une premi re approche de la concat nation retard e delayed_conc U V W gt freeze U delayed conc U V W delayed conc lt gt V V gt delayed conc U V W gt known_part U U U bound conc U W W delayed_conc U V W U lt gt On profite comme pour les contraintes de taille de toute information partielle sur le d but du tuple U pour d geler ce qui peut l tre De la m me mani re que pr c demment on peut aller un peu plus loin en tenant compte du fait que la taille du tuple r sultat est gale la somme des tailles des tuples concat n s Voici un second pr dicat crit dans cette id e qui reproduit exactement le pr
231. de lire des donn es cha nes de caract res dans un fichier et de les traiter sans construire la liste tuple de ces donn es Le m me m canisme que pr c demment est utilis lorsque Prolog d tecte la fin de fichier et un m canisme analogue permet de g rer les autres erreurs pouvant intervenir au cours du traitement Une partie de ces erreurs ne sont pas r cup rables telles que les erreurs de d bordement de piles et dans ce cas on utilise block_exit pour retourner au niveau sup rieur de Prolog Par contre certaines autres erreurs peuvent tre prises en compte dans le traitement afin de poursuivre l ex cution du programme il faut dans ce cas relancer l effacement d un nouveau block puisqu il n y a plus aucun moyen de revenir dans le block pr c dant Remarque A tout instant un programme peut tre interrompu au moyen d une touche d termin e d pendant du syst me utilis par exemple lt Ctrl C gt Cette interruption est g r e soit comme une erreur il est alors possible de l intercepter par le m canisme de block soit comme un dialogue et dans ce cas block ne peut l intercepter L utilisateur peut configurer la gestion de l interruption l aide de la proc dure externe set_config Voir galement eset_config 212 ii PrologilA Bulag Bolig R gles pr d finies et proc dures externes block E B block_exit E Fonction Abandon d effacement R cup ration d erreurs Classe R gl
232. debugger par l argument S2 permet une certaine automatisation batch Si on n est pas en mode debug au moment de l appel break la ou les commandes S2 ne seront prises en compte et ex cut es qu partir d un prochain port ventuellement pendant un backtracking Sinon le port EXIT de break est montr et les ventuelles commandes 52 sont ex cut es Voici un exemple tir de menu p3 dans lequel on a remplac le paquet de nom Poisson par ce qui suit Poisson sole 2 gt break dans Poisson sol p C Poisson thon 4 gt PrologilA 220 i R gles pr d finies et proc dures externes On souhaite donc espionner la premi re r gle du paquet Poisson et chaque invocation de cette r gle imprimer un message dans Poisson afficher le syst me de contraintes portant sur les variables de la question sol imprimer le status du port courant p et enfin poursuivre l ex cution jusqu au prochain point d arr t C Voici un exemple d ex cution dans lequel ce qui est en gras est tap par l utilisateur Les impressions provoqu es par l appel break sont en italique On suppose que l on n est pas en mode debug au moment de lancer la requ te gt RepasLeger h p d h radis p boeuf d fruit h radis p porc d fruit dans Poisson 6 0 CALL Dessert d k_1 h radis p sole 6 0 CALL Dessert d k_1 h radis p sole d fruit h radis p sole d glace
233. dement lors de la simplification equations Debordement lors de la simplification inequations Debordement lors de la simplification Debordement lors de la simplification booleen Memoire saturee 3 Fin de liste attendue C est une liste infinie Chaine attendue Argument de mauvais type Prefixe trop long Memoire saturee 4 Identificateur trop long 2 Contexte deja ferme Identificateur inconnu Famille non fermee Regle inexistante 1 Regle inexistante 1 Identificateur attendu 1 Memoire sature fermeture context Ce n est pas une syntaxe d identificateur Ce n est pas une syntaxe de prefixe Ce n est pas un identificateur Dictionnaire plein Reel strictement positif attendu Reel positif ou nul attendu Symbole inconnu Erreur d ouverture de fichier save Erreur entree sortie Erreur entree sortie Erreur entree sortie Memoire saturee 5 Memoire saturee 6 Argument de mauvais type Type non defini ProloglA 525 Annexes Bolig 526 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 400 422 500 501 502 503 504 505 506 507 508 509 Dictionnaire plein Longueur inconnue Tableau trop grand Identificateur attendu 2 Entier attendu Tableau deja defini Tableau non defini Debordement de tableau Pas d identificateur avec ce prefixe Fichier non chargeable Erreur de chargement
234. doit se faire avant la n gation sous peine de rencontrer des probl mes les variables n tant pas encore instanci es il est clair en effet dans ce cas que la n gation sera sys t matiquement v rifi e le syst me de contraintes avant instanciation des variables bool ennes d entr es sorties tant soluble dans tous les cas Or cette instanciation syst matique au plus haut est fondamentalement en opposition avec la philosophie de Prolog IIT qui consiste installer le plus de contraintes possibles avant toute num ration voir le chapitre sur les contraintes num riques et le pr dicat valuable enum Cette solution ne nous satisfait manifestement donc pas 140 ProloglA Bulag Bolig Les contraintes bool ennes On peut galement en restant un m ta niveau mais sans utiliser de n gation par chec utiliser le pr dicat valuable known On rappelle ce propos qu une variable est connue si et seulement si elle repr sente un arbre dont on connait l tiquette initiale et dont on sait si le nombre de fils est nul ou non Dans ce cas on pourra v rifier pour chacune des solutions au syst me de contraintes pour lequel r1 est vrai que le syst me contraint cette derni re repr senter la valeur 1 c est dire qu elle est connue apr s un nouvel effacement du pr dicat circuit o on reprend les entr es sorties mais o la variable p1 est cette fois ci inconnue Voici cette derni re requ te et l
235. ds sont pratiquement repr sent s Le n ud qui est au sommet de la hi rarchie s appelle la racine ou n ud initial de l arbre 20 ProloglA Bulag Bolig Concepts de base Chaque n ud d un arbre est son tour racine d un arbre appel sous arbre de l arbre initial d fini par ce n ud ses fils les fils de ses fils etc ainsi que les fl ches qui manent de tous ces n uds UN ARBRE COMPORTE UNE TIQUETTE ET UNE SUITE FINIE DE SOUS ARBRES A chaque n ud d un arbre Prolog III est associ e une tiquette Les tiquettes possibles sont e les identificateurs e les caract res e les valeurs bool ennes o et 1 e les nombres e le double signe lt gt Voici un arbre de Prolog II nom marie poids Le nombre des fils d un n ud est toujours fini et ind pendant de la nature de son tiquette Bien entendu la s mantique de cette derni re ce qu elle signifie pour le programmeur peut faire qu un n ud n ait de sens qu assorti d un nombre d termin de fils mais cela n est pas connu des m canismes de base de Prolog IM Le nombre des fils d un n ud peut tre nul un arbre r duit un seul n ud est appel une feuille Prolog III ne fait pas de distinction entre une feuille et l tiquette qu elle porte Par cons quent les identificateurs les caract res les valeurs bool ennes et les nombres sont consid r s comme des cas particuliers d arbres PrologiA 21 Concepts de base
236. e PrologIA 471 Primitives graphiques gr_window_is s Unifie s avec le nom de l unit graphique courante Au lancement de Prolog II l unit graphique courante est la fen tre pr d finie graphic kill window s Tue la fen tre de nom s Si la fen tre s tait l unit graphique courante alors la fen tre pr d finie graphic redevient l unit graphique courante Le nom s ne peut tre celui d une fen tre pr d finie i e ce doit tre une fen tre cr e par new_window print_window s f t print _window s Imprime le contenu de la fen tre de texte s avec la fonte f de taille t La forme avec un seul argument imprime la fen tre avec la fonte courante de la fen tre option fermeture Lorsque l on clique dans la case de fermeture d une fen tre l unit correspondante est ferm e et son nom est retir du menu contenant les noms des fen tres except pour les fen tres pr d finies Il est possible de rendre une fen tre invisible sans la fermer en appuyant sur la touche option en m me temps que la case de fermeture est cliqu e Rafra chissement de la fen tre graphique Les fen tres graphiques peuvent tre rafra chies automatiquement par un bitmap auxiliaire en cr ant ces fen tres avec l attribut lt SAVE 1 gt voir la primitive new_window Il existe une coroutine attach e aux fen tres graphiques qui est toujours d clench e d s que ces fen tres n cessitent un rafra chissem
237. e Exemple gt out tBonjour line fail tBonjour gt outm tBonjour line fail Bonjour outc t Ecrit le terme t et les contraintes qu il supporte Exemples gt outc t fail t num t t num gt outc t fail t numt X3 X2 X3 num line Ecrit une marque de fin de ligne sur l unit de sortie courante output u L unit de nom devient l unit courante de sortie Le cas ch ant un fichier de texte est cr ayant le nom indiqu par la cha ne u ProloglA 195 L environnement close_output L unit courante est enlev e du sommet de la pile des unit s de sortie ouvertes Si elle correspond un fichier alors celui ci est ferm echo no_echo Active resp annule l option qui provoque l affichage sur l unit console des termes lus ou crits sur une autre unit ATTENTION les termes sont d abord lus et cod s puis d cod s et affich s Ce que vous voyez est donc quivalent ce qui a t lu mais peut en diff rer de mani re plus ou moins importante L int r t de cette fa on de proc der r side dans le fait que vous voyez les termes non pas comme vous les avez tap s mais comme Prolog III les a compris ce qui dans une situation de recherche d erreur est pr f rable 196 ProloglA Bolig Bulag L environnement 5 Autres l ments de l environnement Sortir de Prolog Ill exit exi
238. e TEXT APPL montrera les fichiers de type texte et ceux de type application PrologIA 515 Primitives graphiques filtre est une proc dure de filtrage en plus du type pour l acceptation des fichiers proposer Ce doit tre pour l instant est unifi avec la s lection faite par l utilisateur Il est de la forme lt C T N gt o C est le cr ateur cha ne de 4 caract res identifiant l application qui a cr ce fichier T est le type du fichier cha ne de 4 caract res comme TEXT APPL et N est une cha ne indiquant le chemin d acc s et le nom du fichier s lectionn le fichier n est pas ouvert La r gle choue si le bouton Annuler est press sfputfile s Affiche un dialogue permettant de saisir un nom de fichier sur le disque et unifie s avec le nom avec chemin de ce fichier Si l utilisateur tape un nom de fichier d j existant une alerte le pr vient Le fichier donn par l utilisateur n est ni cr ni ouvert La r gle choue si le bouton Annuler est press sfputfile point prompt nominitial s Cette r gle est une forme param trable de la pr c dente point est un point de format lt x y gt indiquant l endroit o est affich le dialogue prompt est une cha ne ventuellement vide contenant un message destin l utilisateur nomInitial est une cha ne ventuellement vide permettant de proposer un nom de fichier dans la zone d
239. e l ment tout terminal non terminal ou toute suite mn d l ments parenth s s par les signes et ou bien par et EL e Les crochets et d limitant une suite d l ments indiquent que sa pr sence est facultative nyn t e Les accolades et indiquent que la suite d l ments qu ils parenth sent peut tre absente ou se r p ter une ou plusieurs fois e La barre d signe une alternative dans une r gle et permet de ne pas r p ter ce qui pr c de e Un commentaire est un texte en italique Dans les cas o une r gle syntaxique s exprimerait formellement de mani re trop complexe et serait donc incompr hensible on se permettra une entorse aux conventions ci dessus en donnant une r gle simplifi e et un commentaire concernant sa validit ou ses exceptions Jeu de caract res Voici le jeu de caract res utilis par Prolog III lt jeu de caract res gt lt caract re sp cial gt lt lettre gt lt chiffre gt 1 Ce sont les caract res dont le code ASCII est compris entre 1 et 32 426 ProloglA Bulag Bolig Syntaxes lt caract re sp cial gt i 7 f l9i i 3 gt 3irill t lt gt Miele Lee lebi rl espace lt lettre gt lt minuscule gt lt majuscule gt lt minuscule gt a b z les accents sont pour plus tard lt majuscule gt A B Z lt chiffre gt 0 1 9 l
240. e Prolog II Comme les op rations les relations sont partielles L ensemble des arbres ou des couples d arbres pour lesquels une relation est d finie n est pas n cessairement gal l ensemble de tous les arbres ou de tous les couples d arbres Les relations binaires sont au nombre de sept Egalit et in galit La condition a1 a2 se lit les arbres a1 et a2 sont gaux La condition a1 a2 se lit les arbres a1 et 42 ne sont pas gaux 1 Rappelons que d un point de vue math matique d finir une relation binaire sur un ensemble D c est choisir un sous ensemble B de l ensemble D x D des couples d l ments de D les couples appartenant B sont dits v rifier la relation De la m me mani re d finir une relation unaire sur D c est choisir le sous ensemble U de D des l ments pour lesquels la relation est v rifi e 50 ProloglA Bolig Prelog Concepts de base L galit des arbres est une relation qui se d finit r cursivement en affirmant que deux arbres a1 et 42 sont gaux si les tiquettes de a1 et 42 sont gales au sens des tiquettes a et a2 ont le m me nombre n de fils sin 0 le premier fils de 41 est gal au premier fils de 2 le deuxi me fils de a1 est gal au deuxi me fils de 42 etc jusqu au n me fils de a1 qui est gal au n me fils de a2 Bien entendu ceci suppose que l on a pr alablement d fini une galit des tiquettes Pour q
241. e que la contrainte T 0 appartient au syst me courant Echoue dans le cas contraire Exemples is leaf X lt gt X2150 is _leaf B1 B2 B1 bool B2 bool is leaf U V 2 Voir galement e bound_tree bound_tree ProloglA 279 2 gens 2 Boli R gles pr d finies et proc dures externes L is num R Fonction V rifie que R repr sente un nombre Classe R gle pr d finie Prolog II Cat gorie V rification de types Param tres connus Aucun Messages d erreur Non Description V rifie que le terme R repr sente une valeur num rique c est dire que la contrainte R num appartient au syst me courant Echoue dans le cas contraire Exemples is num 91252525 is num 3 12e12 X X num is num X Voir galement e num integer 280 ProloglA Bolig R gles pr d finies et proc dures externes is_tuple U Fonction V rifie que U repr sente un tuple Classe R gle pr d finie Prolog III Cat gorie V rification de types Param tres connus Aucun Messages d erreur Non Description V rifie que le terme U repr sente un tuple c est dire que la contrainte U ltuple appartient au syst me courant Echoue dans le cas contraire Exemples is _tuple lt A B C gt is tuple U X ElUl X E U is tuple une chaine cache is tuple A B cCl Voir g
242. e r sont f connus y LL F gt gt input u L unit dont le nom est u devient l unit d entr e courante elle ne doit pas tre une des unit s pr c demment ouvertes et non encore ferm es Le fichier correspondant est recherch et ouvert Aucune autre action en plus du changement de l entr e courante n est ex cut e pour le moment en particulier Prolog II ne bascule pas dans un quelconque mode lecture mais continue l ex cution du programme en cours Ce n est que lorsque ce programme effectuera des lectures sur l unit courante ou bien lorsqu il sera termin et que Prolog II retournera dans l tat lecture d une commande que l effet de input u se manifestera puisque les lectures seront faites partir de l unit indiqu e et non sur l unit courante Bien entendu un fichier ouvert par input peut contenir aussi bien des r gles que des requ tes De plus il peut lui m me contenir une commande input la nouvelle unit courante est empil e au dessus de la pr c dente close_input ProloglA 193 L environnement L unit courante est ferm e et son descripteur est enlev du sommet de la pile des unit s l unit pr c dente redevient unit courante Sorties out f outl f Ecrit le terme t sur l unit courante La lecture par in_term de la forme crite d un terme t produite par out reconstruit le terme t original Quelque soit le type du terme crire si son expre
243. e soit le carr est coll contre la premi re marche soit le carr n est pas assez grand pour toucher la premi re marche Le programme lui m me est constitu des dix r gles suivantes 114 PrologIA Bolig Les contraintes num riques remplir_rectangle A C gt creer_carres C remplir_zone lt 1 A 1 gt L C lt gt A gt 1 creer_carres lt gt gt creer_carres lt B gt C gt creer_carres C rendre_distinct B C B gt 0 rendre_distinct B lt gt gt rendre_distinct B lt B gt C gt rendre_distinct B C B B remplir_zone lt V gt L lt V gt L C C V gt 0 remplir_zone lt V gt L L lt B gt C C gt placer_carre B L L remplir_zone L L C C remplir_zone lt V B B gt L L C C V lt 0 placer_carre B lt H 0 H gt L L gt placer_carre B lt H H gt L L B gt H placer_carre B lt H V gt L lt B V gt L gt B H placer_carre B lt H gt L lt B H B gt L gt B lt H L appel g n ral se fait par la requ te gt remplir rectangle a C C n o n est le nombre de carr s de tailles distinctes qui doivent remplir un rectangle Le programme calcule la dimension 1 x a du rectangle az1 et la liste c des dimensions des n carr s Ce calcul d bute par l ex cution de la premi re r gle qui la fois contraint a tre plus grand ou gal 1
244. e 2006 4 Les Commandes du d buggetir sisi 2007 1 Le langage de commande 2007 2 Points d impression et points d arr t 2008 3 Classifications des commandes 2008 4 Progression snif din einen 2009 5 informations nn re mienne ste sn ba nan te E Sii aiiai 2011 6 Installer des points d arr t 2015 7 Modifier le d roulement de l ex cution eseseseseeeseererersereessse 2018 8 Gestion des options du d buggeur 2022 9 Commandes ahnexesS ssssasennreesssrenetiisslesenennansten nedtossessts 2028 5 R gles pr d finies de mise au polaire 2031 6 Mise au p intavant e iiss siriasi 2031 1 Reprendre une d monstration retry 2031 2 R cup rer ne ertet tentent ere nt nur ee E 2033 xii ProloglA Bolig LISE PITA T HERITAGE Prolog III Version 1 3 Manuel de R f rence PrologilA Garantie et responsabilit s ProloglA n offre aucune garantie expresse ou tacite concernant ce manuel ou le logiciel qui y est d crit ses qualit s ses performances ou sa capacit satisfaire quelque application que ce soit ProloglA ne pourra tre tenue responsable des pr judices directs ou indirects de quelque nature que ce soit r sultant d une imperfection dans le programme ou le manuel m me si elle a t avis e de la possibilit que de tels pr judices se produisent En particulier
245. e cas d un appel une r gle pr d finie on obtient la s quence gt debug t gt line 1 1 CALL line DBG s 1 1 EXIT rC line DBG s O OJEXIT r1 query DBG s 0 gt fig 3 ProloglA 2005 Outils de mise au point Revenons la figure 1 On constate que la plupart des lignes sont construites selon un m me sch ma Voici la d nomination puis l explication des diff rents champs de ce sch ma 4 5 EXIT r2 unbut al a2 dbg i j Num ro de la r gle utilis e But appel Prompt Nom de la porte Niveau de l appel Profondeur de l appel Quelques d finitions Nom de la porte C est une des cha nes CALL RULE ok no EXIT REDO FAIL Profondeur d un appel num ro de boite C est le num ro d ordre de cet appel dans la branche courante de la d monstration On peut dire que la profondeur d un appel est son niveau dans l arbre ET de la d monstration courante La profondeur d appel du premier but de la question est 1 Ce num ro augmente en g n ral d une unit d un appel au suivant mais l effacement de pr dicats pr d finis peut donner lieu des variations sup rieures l unit Ce num ro est tr s important car il sert identifier les boites vivantes de fa on unique On se rappellera que chaque boite correspond un appel Profondeur de la d monstration C est la profondeur de l appel courant Ce nombre augmente quand un appel est ex
246. e de ce chapitre concernant les listes Echoue lorsque la liste L n est pas enti rement connue 6 Les cha nes Comme nous l avons d j mentionn les cha nes en Prolog II sont des tuples dont les l ments sont des caract res On peut donc utiliser sur les 84 ProloglA Bolig Bolig Arbres tuples cha nes et listes cha nes l op ration de concat nation ainsi que les relations unaires et binaires utilisables sur les tuples Voici quelques exemples de contraintes sur des cha nes gt X a a x X 10 x aaaaaaaaaa gt X Y une concatenation lt d e gt Z Y lt gt V o i c i Z U chaine x Voici une concatenation de chaine Y Voici Z chaine U lt gt Primitives sur les cha nes Il nous faut galement noter un certain nombre de r gles pr d finies et pr dicats valuables concernant les cha nes de caract res On se reportera pour plus de d tails au chapitre R gles pr d finies et proc dures externes Manipulations de cha nes conc string S1 S2 S3 Cette r gle pr d finie a le m me effet que son homologue de Prolog Il Elle num re tous les triplets s1 s2 s3 de cha nes telles que s3 est la concat nation de s1 et s2 Ce pr dicat ne r ussit que si les cha nes s1 et s2 ou bien la cha ne s3 sont enti rement connues find pattern S1 S2 N Pose la contrainte N D o D est la position du d b
247. e dessus les diff rents l ments d une liste gt circ list size lt N L gt lt x 20 gt max width L 20 x circ list draw V R actif monltemDraw V R actif circ list extract lt N L gt V arg2 N L V circ list click i lt N L gt R P lt lt N1 L gt lt gt gt arg2 0 L M mod N M N1 1 circ list draw i lt N1 L gt R 1l max width l X X 4 gt max width S Ll X Xx gt gr _stringwidth S Y max X Y X0 max_width L X0 X maxof X Y X gt X gt Y maxof X Y Y gt ProloglA 511 Primitives graphiques monltemDraw lt N L gt r actif gt arg2 N L S gr_moveto x 2 y1 14 gr_rect eraseRect r gr_rect frameRect r outItem S actif r lt xl yl x2 y2 gt outItem S 1 gt outml S outItem S 0 gt gt gr dialog row userItem monltem listel circ list lt 1 FIRST abcd e LAST gt 11 M lt user Item l buttonD 1 1 L lt user Item L f monltem listel e 512 ProloglA Bolig A e e o Primitives graphiques Exemple de cr ation d un item affichant des ic nes et changeant d ic ne lorsque l on clique dessus gt iconManager size lt 32 32 gt iconManager draw _ V R _ _ gr_icon V R iconManager extract _ V V gt iconManager click N V R P lt V2 lt gt gt gt mod V 1 3
248. e gt lt caract re constant gt il s agit de l accent grave lt cha ne de caract res gt lt caract re constant sauf gt mm w lt caract re constant gt lt caract re du clavier sauf retour chariot gt lt caract re d sign gt Voici quelques exemples de caract res constants a repr sente le caract re a NN repr sente le caract re n repr sente le caract re retour la ligne EALTO0 repr sente le caract re z Quelques exemples de cha nes de caract res Toto va a l ecole 1 1 Ce code est d pendant de la machine utilisez n au lieu de 012 ou r Prolog IA 431 Pl Syntaxes 2i Toto va a l ecole 2 Cette chaine contient nun retour chariot 3 Les crochets et indiquent 4 Les cha nes 1 et 2 sont identiques il en est de m me pour les cha nes 3 et 4 La cha ne 5 a pour contenu Les crochets et indiquent Les cha nes de caract res suivantes sont incorrectes a p 2 Syntaxe de base Variables Les caract res utilisables dans une variable sont les suivants lt alphanum rique tendu gt lt lettre gt lt chiffre gt apostrophe underline dollar Dans toutes les modes syntaxiques syntaxe de base et syntaxe Edimbourg on peut crire une variable de la fa on suivante lt variable gt _ lt alphanum rique tendu gt _underline par exemple
249. e l on est en droit d attendre 2 Les arbres Les arbres forment la classe la plus g n rale d objets d finis en Prolog II Tous les objets d finis dans la suite de ce document tuples listes cha nes valeurs num riques ou bool ennes sont des l ments de l ensemble des arbres et toute variable Prolog IIT repr sente une valeur prise dans cet en semble Ces arbres sont compos s de n uds tiquet s par e des identificateurs e des caract res e les valeurs bool ennes o et 1 e des valeurs num riques e le signe sp cial lt gt On prendra bien garde ne pas confondre arbres et termes Les arbres sont des l ments du domaine de Prolog II les termes sont des constructions syntaxiques 70 ProloglA Bulag Bulag Arbres tuples cha nes et listes Voici un exemple d arbre rable S feuilles d Oe e r lobes caduques 7 1 Les arbres dont l tiquette initiale est un identificateur sont appel s arbres factuels et ceux dont l tiquette initiale est le signe lt gt sont appel s tuples Les tuples dont tous les l ments sont des caract res sont appel s cha nes NOTATION En Prolog II les cha nes sont plut t repr sent es entre guillemets par exemple Ralliez vous mon panache blanc et les tuples entre chevrons par exemple lt Marignan 1515 1 gt Op rations sur les arbres Les op rations d finies sur les arbres sont les o
250. e l expression bool enne en question A B Il n y a aucune op ration d finie sur les listes en Prolog III autre que celles concernant les arbres et donc pas de contraintes particuli res On pourra quelquefois privil gier ce type de structures dans des programmes sans concat nations pour en am liorer les performances ProloglA 83 Arbres tuples cha nes et listes On peut se demander juste titre quel est le statut exact du double symbole 11 qui d signe la liste vide La r ponse est qu il s agit d un identificateur qui devrait en toute rigueur tre repr sent entre quotes mais pour lequel il est tol r d omettre ces quotes Les notations I et et m me sys 11 sont donc quivalentes Voici quelques ex cutions faisant intervenir des listes gt E U A B C L E U lt A B C L gt gt E X Y A B C L E Ts vs Be i Aea gt A B C L A L A A L B C L gt is_ident 1 Primitives sur les listes arg2 N L T Sin est nul pose la contrainte T N o N repr sente le nombre d l ment de la liste t Sin n est pas nul pose la contrainte T N o n est le Ni me argument de la liste 1 Echoue si N n est pas un entier positif connu ou si la liste amp n est pas suffisamment connue list_tuple L U Pose la contrainte u u o u est le tuple compos des l ments qui forment la liste amp voir la suit
251. e la s lection d un menu ou le rafra chissement d une fen tre graphique Les v nements de type position de la souris ou r alisation d un clic peuvent tre test s par programme ce qui permet de r aliser des boucles d v nements souris D cembre 1990 Pr ologlA Primitives graphiques Pelay 1 Introduction et conventions Ce chapitre d crit une biblioth que des primitives mises la disposition du programmeur Prolog II pour la r alisation d interfaces graphiques Il suppose du lecteur une certaine pratique des environnements graphiques multi fen tres et de leurs bo tes outils Sous Unix ou VMS on suppose qu on est plac dans un environnement de type XWindows X11 ou SunView Il faut avoir au pr alable lanc Prolog III avec l option W correspondant l environnement graphique disponible qui sont WS pour SunView WX pour XWindows Sur ces machines le graphique est initialis par la commande Prolog III gt load graphic Le terme console d signe la fen tre de lancement de Prolog IMI celle o appara t la banni re ProloglA Les fen tres graphiques que l on peut ouvrir partir de Prolog III sont de deux types GRAPHICS ou MODAL Les objets attach s une fen tre peuvent tre de nature vari e champs ditables bo tes de choix boutons actifs ou non menus de type pop up textes et dessins etc Les bo tes de dialogue cf gr_dialog utilisent en
252. e la famille correspondant au pr fixe s1 l identificateur dont le nom abr g est donn par la cha ne s2 Examinons l effet de ces commandes sur un exemple gt current context t0 tl t2 t3 Etocs 1 EL s n 28 eye l 3 lt s gt string ident p a dictionary outl sys dictionary dictionary p sys a dictionary gt en lecture l identificateur abr g dictionary est devenu sys dictionary comme le montre le r sultat du pr dicat pr d fini string_ident tandis qu en criture l identificateur sys dictionary est abr g en dictionary Vue la d finition du contexte tout ceci montre que sys dictionnary appartient la partie ferm e de la famille sys Continuons notre exemple gt remove implicit sys dictionary gt string ident p a dictionary outl sys dictionary sys dictionary p lt gt a dictionary gt notre identificateur dictionary n appartient plus la partie ferm e de la famille sys Le comportement du contexte de lecture et criture son sujet a chang en lecture dictionary est compl t en dictionary puisque d apr s le contexte le pr fixe par d faut est la cha ne vide que l on peut noter ou lt gt tandis que en criture sys dictionary n est pas transform en sa forme abr g e dictionary 182 ProloglA Bulag Bolig L environnement Ecrit sur la sortie courante la forme abr g e des
253. e mais impose 4 de repr senter une valeur bool enne Ensembles de contraintes quivalents 0 gt a a x lt gt 1 a a 122 PrologiA Bulag Bolig Les contraintes bool ennes a lt gt b amp b lt gt c n L a amp b amp c Celle ci pose une quivalence entre trois variables bool ennes Ensembles de contraintes quivalents a boolt a 0 a b a c a gt b b gt c c gt a gt a b Cette contrainte que l on pourra ais ment rapprocher d une clause propositionnelle voire d une r gle de production de syst me expert pr sente la particularit de comporter un ou droite de l implication ce qui est g n ralement interdit dans les d monstrateurs classiques Ensembles de contraintes quivalents al bl cla b 1 a amp b gt al bl c Voici un tableau r capitulatif des op rations et relations utilisables pour l alg bre de Boole Op rations Relations Utilis es pour construire des Utilis es pour construire expressions bool ennes des contraintes bool ennes non gal amp et diff rent ou gt implique implique lt gt quivalent Forme normale conjonctive Au premier abord la forme normale utilis e pour le codage des contraintes bool ennes au sein de l interpr teur semble ne concerner en rien l utilisateur de Prolog III Il nous para t toutefois important de la mentionner pour deux raisons principales
254. e par d faut du contexte de lecture criture Chaque acc s est crit sous la forme identificateur arit dictionary L Fonction Recherche des modules utilisateurs Classe Proc dure externe Prolog M I Cat gorie Gestion des r gles et des identificateurs Param tres connus Aucun Messages d erreur Non Description Unifie L avec la liste des pr fixes des modules utilisateur pr sents en m moire ProloglA 235 Ed L a La Ed ol R gles pr d finies et proc dures externes ee dictionary M L Fonction Recherche des modules utilisateurs Classe Proc dure externe Prolog M I Cat gorie Gestion des r gles et des identificateurs Param tres connus M qui doit tre une cha ne Messages d erreur Si M n est pas une cha ne de caract res Description Unifie L avec la liste des acc s du module M Chaque acc s est repr sent sous la forme d un tuple lt identificateur arit gt Exemple gt aa bb 1 gt aa cc 1 2 Sins gt dictionary aa Lj L aa lt bb 1 gt aa lt cc 2 gt 236 ProloglA Bolig R gles pr d finies et proc dures externes dif T1 T2 Fonction In galit Classe Proc dure externe Prolog M I Cat gorie Contr le Param tres connus Aucun Messages d erreur Non Description Pose la contrainte T1 T2 ProloglA 237 2 gens 2 Bol R gles pr d finies et proc dures e
255. e pr d finie Prolog MI Cat gorie Contr le Param tres connus B Messages d erreur Block ind fini Description Fonctionnement analogue aux formes pr c dentes avec une tiquette E la place de deux B est le but ou la suite de buts effacer block E B lance l effacement de B l effacement ult rieur de block_exit un argument produira la recherche d un block dont le premier argument s unifie avec l argument de block_exit e La forme block E B est quivalente block E _ B e Laforme block_exit E est quivalente block_exit E lt gt Lorsque block_exit E C est effac dans un environnement parenth s par block E B alors block_exit E C se comporte comme block_exit E Inversement lorsque block_exit E est effac dans un environnement parenth s par block E C B alors block_exit E se comporte comme block_exit E lt gt Remarque A tout instant un programme peut tre interrompu au moyen d une touche d termin e d pendant du syst me utilis par exemple lt Ctrl C gt Cette interruption est g r e soit comme une erreur il est alors possible de l intercepter par le m canisme de block soit comme un dialogue et dans ce cas block ne peut l intercepter L utilisateur peut configurer la gestion de l interruption l aide de la proc dure externe set_config Voir galement eset_config PrologIA 213 Bolig R gles pr d finies et proc dures e
256. e que R est un nombre rationnel connu Classe Proc dure externe Prolog II Cat gorie V rifications de types Param tres connus Voir ci apr s Messages d erreur Non Description S ex cute avec succ s si R repr sente une valeur rationnelle non enti re et connue Echoue dans tous les autres cas Exemples rational 3004 1960 rational 31 897 rational 6 3 rational X 322 ProloglA Bolig R gles pr d finies et proc dures externes real F Fonction V rifie que R est un nombre flottant connu Classe Proc dure externe Prolog IM I Cat gorie V rifications de types Param tres connus Voir ci apr s Messages d erreur Non Description S ex cute avec succ s si F repr sente un nombre flottant connu Echoue dans tous les autres cas Exemples real 3004 1960e20 real 31 897 real 1 0 real X 2 0 ProloglA 323 Ed L a La Ed ol R gles pr d finies et proc dures externes ss redef_array I N Fonction Modifie la taille d un tableau Classe Proc dure externe Prolog II Cat gorie Gestion des r gles et des identificateurs Param tres connus IN Messages d erreur Voir ci apr s Description Modifie la taille allou e un tableau cr par la primitive def_array Exemples def _array tab 100 assign tab 50 3 val tab 50 X redef array tab 200 assign tab 154 2
257. e r sultat fourni gt circuit lt 1l P2 P3 P4 P5 gt lt X1 X2 X3 gt lt Y1 Y2 gt circuit lt P1 P2 P3 P4 P5 gt lt X1 X2 X3 gt lt Y1 Y2 gt booleans lt X1 X2 X3 Y1 Y2 gt known Pl XL 0 X2 O X3 0 Vlr 14 Y2 10 P2 O 3 01 P4 0 P5 0 PL 1 XIL Oty X2 O Kaos 1 ML 1 Y2 Lr P2 01 gt p3 0 P4 0 P5 0 PTEs XL 0E K2 dl X3 0 YE Sar KA 1 pP2 01 P3 0 P4 0 P5 0 P1 1 XL R X2 0 X3 0 VAL Y2 sas bu P2 O P3 0 P4 0 P5 0 Pl 1 XL Lr X2 0 Kane Xi AQ Y2 0 P2 O P3 0 P4 0 PEnio Biani Xl s LL X2 l X3 SiL ty Ve oT V2 LT p2 0 p3 01 P4 0 PE 0 PI Cette solution n est pas encore parfaitement satisfaisante En effet dans la mesure o les seules variables pr sentes dans le pr dicat Circuit sont des variables bool ennes on peut imaginer de reporter directement la n gation sur l alg bre des bool ens et traiter par l m me celle ci de mani re parfaitement rigoureuse ProloglA 141 Les contraintes bool ennes Pour ce faire il suffit d ajouter un param tre au pr dicat Circuit et au_plus un vrai param tre qui renvoie la valeur bool enne de l expression qui repr sente le syst me de contraintes initial on a d j remarqu que l on peut toujours transformer un syst me de contraintes bool ennes
258. e sur les nombres Toute affectation de x et y qui transformera cette contrainte en une condition vraie devra affecter un nombre x Cette contrainte impose d abord la variable y d tre num rique ensuite d tre gale la variable x Autrement dit les syst mes x Yy et y num x Y sont qui valents De mani re analogue les syst mes T 1 x et x num X 0 T 1 x sont eux aussi quivalents Examinons d autres exemples de syst mes de contraintes du m me genre T xIY 1 T lt gt y 2 T x Y 3 T X Y 4 1 Comme en math matiques nous dirons que deux syst mes sont quivalents lorsqu ils ont le m me ensemble de solutions 58 ProloglA Bulag Bolig Concepts de base Le terme x y repr sente l ensemble des arbres qui ont x pour tiquette et y pour suite de fils c est dire puisqu aucune autre contrainte ne p se sur x ou sur y l ensemble de tous les arbres la contrainte 1 est satisfaite quelque soit l arbre donn pour valeur T Les contraintes 2 3 et 4 n ajoutent aucune autre limitation sur la suite des fils de T en revanche faisant intervenir des op rateurs arithm tiques ou bool ens elles d terminent le type de l tiquette de cet arbre En d finitive ces quatre syst mes de contraintes sont respectivement quiva lents 1 T__ituple 2 rT Iboolt 3 T_inumt 4 Restons dans les exemples un peu bi
259. e valeur Dans cette optique le lancement du programme pour un jeu de donn es correct ne fournit pas comme r sultat la valeur o pour toutes les variables repr sentant les pannes ces variables restant libres On peut utiliser ce programme de deux mani res soit en imposant des valeurs aux entr es et aux sorties du circuit de fa on obtenir le cas ch ant des informations sur les portes d ficientes soit en recherchant les jeux de tests qui permettent de caract riser une panne Voici tout d abord deux requ tes qui recherchent une panne gt circuit lt P1 P2 P3 P4 P5 gt lt 1 1 0 gt lt 0 1 gt P5 0 P4 1 P3 0 P2 0 P1 0 La porte 4 Oux est en panne gt circuit lt P1 P2 P3 P4 P5 gt lt 1 0 1 gt lt 0 0 gt P5 0 P4 0 P2 0 P3 amp P1 0 P3 P1 1 Une seule des deux portes parmi 1 ou 3 est d ficiente ProloglA 137 Les contraintes bool ennes Pelay Int ressons nous pr sent rechercher les jeux de tests n cessaires la ca ract risation d une panne donn e La premi re id e est de lancer la requ te en laissant inconnues les entr es et les sorties et en fixant une panne vrai Voici une telle requ te o l on s int resse la porte 1 gt circuit lt 1 P2 P3 P4 P5 gt lt X1 X2 X3 gt lt Y1 Y2 gt P2 0 P3 0n P4 0 P5 0 X38 amp X2 gt Y1 X1 X28 amp X1 gt Y1 X3 Y2 amp X3 amp X2
260. e vertical 42 relatif la position 41 sens positif dans le sens des aiguilles d une montre Exemple gt gr_arc frame 100 100 200 170 20 50 al a2 x1 y1 X2 y2 gr_icon n x1 y1 x2 y2 gr_icon n r Dessine dans l unit graphique courante et inscrit dans le rectangle indiqu une ic ne d crite dans une ressource ICON de num ro n Cette ressource est recherch e d abord dans l ex cutable Prolog II puis dans le fichier syst me Le syst me contient toujours les ic nes 0 Panneau stop 1 Notification 2 Panneau danger Le meilleur r sultat est obtenu en donnant comme rectangle un carr de cot gal 32 ProloglA 477 Primitives graphiques Pelig 4 Usage de la souris R gles pour manipuler les fen tres l aide du clavier et de la souris X Les r gles suivantes ne concernent que l utilisateur XWindows ou SunView disposant d une souris 3 boutons D placement bouton central maintenu appuy Agrandissement touches SHIFT CONTROL bouton central maintenu appuy ou bouton gauche dans le coin inf rieur droit de la fen tre clic du bouton droit pour les faire appara tre clic du bouton gauche pour valider le choix Ramener une fen tre au premier plan touche SHIFT clic du bouton central Faire passer une fen tre en arri re plan touche CONTROL clic du bouton central Rep rage de la souris Dans ce qui suit les variables commen ant par r re
261. eal S F Fonction Conversion d une cha ne en un flottant Classe R gle pr d finie Prolog MI Cat gorie Conversions Param tres connus Voir ci apr s Messages d erreur Non Description e Si S est connu pose l ensemble de contraintes F S o S est un flottant form partir des caract res de la cha ne S e Si Fest connu pose l ensemble de contraintes S F o F est une cha ne form e des caract res qui composent le flottant F Exemples gt string real 3 1l4e5 F 3 140000 e 05 gt string real S 3 14e5 S 3 140000 e 05 ProloglA 355 2 gens 2 Boli R gles pr d finies et proc dures externes L substring S1 N1 N2 S2 Fonction Extraction de sous cha nes Classe R gle pr d finie Prolog MI I Cat gorie Arbres listes cha nes et tuples Param tres connus Voir ci apr s Messages d erreur Non Description Pose la contrainte S2 S1 o S1 est la sous cha ne de S1 commen ant la position N1 de longueur N2 Echoue si une telle sous cha ne n existe pas ou si S1 n est pas connue Exemple gt substring 1234567890 3 4 X X 3456 356 ProloglA Bolig R gles pr d finies et proc dures externes suppress I Fonction Suppression d un paquet de r gles Classe Proc dure externe Prolog M II Cat gorie Gestion des r gles et des identificateurs Param tres
262. eeze 157 254 front_window 466 functor 386 G garbage_collection 255 gcd 256 get 387 get0 388 get_config 257 get_configuration 258 550 get_key 487 get_screen 466 get_window 466 getenv 259 gr_arc 476 gr_arc 477 gr_button_hit 486 gr_choosecolor 482 gr_click 479 480 gr_color 481 gr_color2 481 gr_color3 481 gr_dialog 498 gr_draw_buttons 485 gr_editf 486 gr_erase 474 gr_font 484 gr_getmouse 480 gr_icon 478 gr_line 474 gr_lineto 474 gr_list 489 gr_load 516 gr_mode 482 gr_move 474 gr_moveto 474 gr_pen 482 gr_penloc 474 gr_polygon 476 gr_popupltem 491 gr_print 492 gr_rect 475 gr_setorigin 474 gr_stringwidth 482 gr_text 483 gr_window 472 gr_window_is 472 GRAPHICS 467 groupe 500 gtty 489 ident 260 identificateurs 24 433 444 ProloglA Poleg Index abr g s 177 syntaxe 177 434 444 complets 177 s parateur 177 syntaxe 177 434 444 if 172 369 implique op ration 29 119 implique relation 52 120 in_char 193 261 in_char 262 in_ident 263 in_integer 264 in_real 265 in_sentence 194 266 in_sentence 267 in_string 268 in_term 269 in galit 50 101 in quations num riques 104 inf 171 369 infe 171 369 inf rieur ou gal 101 inf rieur strict 101 inl 270 input 8 194 271 516 input_is 272 insert 188 189 273 integer 106 275 interruption 167 is 389 is_bool 129 276 is_char 277 is_ident 278 is_leaf 279 is_num 106 280 is_tuple 81 281 is_univ 282 item
263. el 1 La convention par d faut adopt e dans Prolog III n est pas la m me que celle de l environnement MPW o toute fen tre comporte simultan ment un diteur de textes et un interpr te de commandes ce qui a la cons quence d obliger r apprendre l emploi de touches parmi les plus courantes comme retour chariot et enter Il est n anmoins possible de se mettre en mode d dition MPW l aide de la commande stty 1010 ProloglA Bolig Pelog Utilisation de Prolog IHI sur Macintosh ou cha ne de caract res La fonction externe peut r ussir ou au contraire provoquer un backtracking Le module utilisateur fichier userrule c livr avec le syst me Prolog III sert de relais entre Prolog et les routines de l utilisateur crites en C ou dans un autre langage compatible avec C De cette mani re il est possible d avoir simultan ment des r gles pr d finies dans les deux langages Marche suivre Quand Prolog III est lanc pour la premi re fois l tat initial standard de la m moire de travail fichier initial3 psv est charg Pour ajouter de nouvelles r gles pr d finies crites dans un autre langage il convient de proc der de la fa on suivante e choisir un nombre entier sp cifique diff rent de tous ceux d j utilis s dans ce but pour faire le lien entre l identificateur qui sera le nom de la r gle dans Prolog III et celui qui sera le nom de la proc dure externe e associer d
264. emble de contraintes F s o s est un flottant form partir des caract res de la cha ne s e Si F est connu pose l ensemble de contraintes s F o F est une cha ne form e des caract res qui composent le flottant F string bool S B e Si s est connu pose l ensemble de contraintes B s o s est un bool en form partir des caract res de la cha ne s e Si B est connu pose l ensemble de contraintes Ss B o B est une cha ne form e des caract res qui composent le bool en 8 Divers string S S ex cute avec succ s si s repr sente une cha ne enti rement connue Echoue dans tous les autres cas 86 ProloglA Bulag Bolig Arbres tuples cha nes et listes 7 Exemples Nous proposons ici un certain nombre de programmes concernant plus particuli rement les tuples qui montrent des possibilit s d utilisation Certains utilisant des contraintes retard es il serait bon de se reporter au chapitre correspondant si l on d sire les examiner dans le d tail Calcul des feuilles d un arbre Le programme suivant recherche les feuilles diff rentes de lt gt dans un arbre On notera la puissance de l op rateur g n ral de construction d arbres ainsi que l utilisation des contraintes retard es feuilles lt gt lt gt gt feuilles Al lt gt lt A gt gt AH lt gt feuilles A lt U gt V X Y gt feuilles U X feuilles V Y
265. ement e set_config set_configuration get_configuration ProloglA 257 2 gens 2 Bol R gles pr d finies et proc dures externes L set_configuration U Fonction Etat courant des configurations Classe Proc dure externe Prolog II Cat gorie Environnement Param tres connus Aucun Messages d erreur Non Description Pose la contrainte U U o U est un tuple de doublets lt champ valeur gt qui d crit l tat de tous les param tres courants Pour la liste des champs et de leurs valeurs possibles voir set_config Exemple gt get _ configuration x X lt lt echo 0 gt lt epsilon float 7 450580596923828e 09 gt lt format decimal 3 gt lt format float 15le gt lt format out num Fnormal gt lt statistics 0 gt lt syntax Edimbourg gt lt trace 0 gt lt tty wrap 200 gt lt undefined rule fail gt gt Voir galement e set_config set_configuration get_config 258 ProloglA Bolig R gles pr d finies et proc dures externes getenv S1 S2 Fonction Obtenir la valeur d une variable de l environ nement Classe Proc dure externe Prolog II Cat gorie Environnement Param tres connus S1 Messages d erreur Non Description Pose la contrainte S2 S2 o 52 est la valeur associ e au sein du syst me d exploitation la variable d environnement de nom S1 Par exemple sous UNIX une te
266. emier l ment x d un tuple l il suffit de l unifier avec un terme de la forme lt x gt r qui d note la concat nation d un tuple lt x gt un seul l ment et d un tuple r quelconque Ceci nous permet d crire les deux r gles element_de en Prolog IT gt element de x lt x gt r gt gt element de x lt y gt r gt element de x r x y gt puis on peut demander gt element de l lt 3 5 1 gt gt element_de x lt 3 5 1 gt gt element_de 9 lt 3 5 1 gt gt Les cha nes de caract res sont des tuples dont les l ments sont des SaS caract res La cha ne not e abc est le tuple de caract res lt a b c gt On peut m langer les cha nes et les tuples notamment l aide de l op ra teur de concat nation On peut imposer une variable de type cha ne une longueur n connue le nombre de caract res en installant la contrainte x n x y lt gt au lt f e u gt y pot pot au feu y pot gt x gt PrologIA 13 Bulag D buter avec Prolog III L arithm tique et les contraintes num riques Voyons le probl me suivant on dispose d un certain nombre de chats d oiseaux les nombres de t tes et de pattes et on demande d exprimer les relations liant ces nombres Si on appelle c le nombre de chats o le nombre d oiseaux t le nombre de t tes p le nombre de pattes
267. emiers l ments de v1 split U L Pose la contrainte L L o L est la liste compos e des l ments qui forment le tuple v voir la suite de ce chapitre concernant les listes Echoue lorsque le tuple u n est pas connu l ex cution tuple U S ex cute avec succ s si u repr sente un tuple enti rement connu voir le pr dicat bound Echoue dans tous les autres cas is tuple U V rifie que le terme vu repr sente un tuple c est dire que la contrainte U tuple appartient au syst me courant Echoue dans le cas contraire Un exemple de programme sur les tuples Comme premier exemple de programme nous nous proposons de consid rer le retournement ou inversion d un tuple Nous examinerons successivement la mani re habituellement utilis e en Prolog puis la programmation en Prolog III et nous terminerons par l examen d un programme utilisant des contraintes retard es Voici tout d abord le programme classique ceci pr s que l on utilise des tuples au lieu de listes On pourra en profiter pour noter la mani re d exprimer un tuple la mode Prolog standard un couple t te de liste queue de liste l aide de la concat nation Le rapport dans ce cas entre le E L de Prolog II et le lt E gt 1 de Prolog III n est on l aura compris que purement fonctionnel la s mantique du point demeurant fondamen ProloglA 81 Arbres tuples cha nes et listes talement diff rente On ret
268. en expression dont la valeur est vrai Voici le nouveau programme On utilise la version de au plus un vrai trois arguments qui renvoie la valeur b de l expression Il existe au plus un l ment vrai dans la liste 1 Le r sultat de circuit est la conjonction de b et de la valeur de la nouvelle expression construite Notons galement au passage que les implications originales ont t transform es en disjonctions ou lt gt 0 gt ou lt Bl gt L B1 B2 gt ou L B2 au plus un vrai lt gt 1 gt au plus un vrai lt Bl gt L B gt ou L B2 au plus un vrai L B3 B B1 amp B2 B1 amp B3 circuit lt P1 P2 P3 P4 P5 gt lt X1 X2 X3 gt lt V1 Y2 gt B1 amp B2 gt au plus un vrai lt P1l P2 P3 P4 P5 gt B1 B2 P1 U1 lt gt X1 amp X3 amp P2 U2 lt gt X2 amp U3 amp P4 U3 lt gt X1 lt gt X3 P3 Y1 lt gt U1 U2 amp P5 Y2 lt gt X2 lt gt U3 amp 1e On peut pr sent faire porter la n gation sur le dernier param tre de circuit et la requ te s crit de la mani re suivante gt circuit lt 1l P2 P3 P4 P5 gt lt X1 X2 X3 gt lt Y1 Y2 gt 1 circuit lt 0 P2 P3 P4 P5 gt lt X1 X2 X3 gt lt Y1 Y2 gt 0 booleans lt X1 X2 X3 Y1 Y2 gt Le r sultat est bien s r identique celui pr sent pr c demment 142 PrologiA Bulag Prelog Les contraintes bool
269. end_module 243 enum 244 epsilon_float 342 eg 246 eql 369 exit 247 exp 370 fail 249 find_pattern 251 findall 250 format_decimal 342 format_ float 342 format_out_num 341 Fdecimal 341 Fexact 341 Ffloat 341 Fint fract 341 Fnormal 341 free 252 free_label 253 freeze 254 garbage_collection 255 gcd 256 get_config 257 ProloglA 371 R gles pr d finies et proc dures externes Pely get_configuration 258 getenv 259 ident 260 if 369 in_char 261 in_char 262 in_ident 263 in_integer 264 in_real 265 in_sentence 266 in_sentence 267 in_string 268 in_term 269 inf 369 infe 369 inl 270 input 271 input_1s 272 insert 273 integer 275 is_bool 276 is_char 277 is_ident 278 is_leaf 279 is_num 280 is_tuple 281 is_univ 282 kill_module 283 known 284 known_part 285 lcm 286 line 287 list 288 list_string 293 list_tuple 294 In 370 max_value 295 min_value 296 372 mod 297 369 module 298 mul 368 mult 299 new 300 next_char 301 next_char 302 no_echo 303 no_trace 304 not 305 num 306 numden 307 out 308 outc 309 outl 310 outm 311 outml 312 output 313 output_1s 314 particular_value 315 pgcd 316 ppcm 317 predefined 318 prologIII 319 quit 320 rad 370 rational 322 real 323 redef_array 324 reinsert 325 reload 327 remove_implicit 328 repeat 329 reset_cpu_time 330 resume_trace 331 retract 332 rule 333 rule nb 336 PrologiA R gles pr d finies et proc dures ex
270. ennes Un puzzle logique Ce casse t te logique propos par Lewis Caroll a ceci d int ressant qu il est constitu d une suite de phrases que l on peut ais ment formaliser sous la forme de formules de logique propositionnelle et qu il ne comporte pas de questions On peut donc s amuser partir de ces phrases rechercher les liens qui existent entre certaines des propositions qui y figurent C est donc un exemple typique pour lequel la solution recherch e ne peut se pr senter que sous la forme de la simplification sur un sous ensemble de variables du syst me de contraintes initial Voici les phrases propos es 1 Tout individu apte tre d put et qui ne passe pas son temps faire des discours est un bienfaiteur du peuple Les gens l esprit clair et qui s expriment bien ont re u une ducation convenable Une femme qui est digne d loges est une femme qui sait garder un secret Les gens qui rendent des services au peuple mais n emploient pas leur influence des fins m ritoires ne sont pas aptes tre d put s 5 Les gens qui valent leur pesant d or et qui sont dignes d loges sont toujours sans pr tention 6 Les bienfaiteurs du peuple qui emploient leur influence des fins m ritoires sont dignes d loges 7 Les gens qui sont impopulaires et qui ne valent pas leur pesant d or ne savent pas gar der un secret 8 Les gens qui savent parler pendant des heures et des heures et qui sont ap
271. ent Cette coroutine est gr_update u o u repr sente le nom de la fen tre rafra chir 472 ProloglA Bulag A e e o Primitives graphiques La r gle gr_update n est pas d finie dans l environnement standard L utilisateur peut donc en crivant une r gle lt gr_update 1 gt d finir par programme ce que doit tre le rafra chissement d une fen tre graphique u sans utiliser de bitmap auxiliaire 3 Dessin et positionnement Dans toutes les r gles expos es ci dessous x et y repr sentent les coordonn es horizontales x et verticales y L axe positif des y est dirig vers le bas Se rappeler que l origine par d faut x 0 y 0 co ncide avec le coin int rieur en haut et gauche de l l ment de r f rence Ce dernier est toujours la fen tre graphique courante sauf pour les primitives de positionnement des fen tres pour lesquelles l l ment de r f rence est l cran Les coordonn es x ou y peuvent tre exprim es indiff remment par des nombres entiers r els ou rationnels gr_moveto x y Positionne le point d criture crayon de la fen tre graphique courante en x y gr_lineto x y Tire un trait depuis la position courante jusqu au point x y en d pla ant le crayon gr_move x y Modifie sans tracer la position du crayon de x pixels dans le sens horizontal et de y pixels dans le sens vertical Si la position courante tait x0 y0 la nouvelle position est
272. entier C est ce m me m canisme qui est utilis pour la gestion interne des erreurs en Prolog III Une erreur rencontr e dans l ex cution d un programme provoque l effacement du but block_exit I C o I est un entier corres pondant au num ro de l erreur et C un compl ment d information ou le tuple vide De cette mani re l utilisateur a la possibilit de r cup rer toutes les erreurs de Prolog III pour les traiter dans son application Exemples executer commande gt block fin commande C lire et executer lire et executer gt repeat outm in_char X executer X executer t gt terminaison de programme block exit fin commande lt gt executer c gt outml continuer executer X gt block exit fin commande X pri o de Dans cet exemple la commande t utilise block_exit pour revenir au niveau sup rieur de executer_commande en interrompant l effacement de lire_et_executer et en supprimant tous les points de choix repeat en attente La commande c termine normalement l effacement de lire_et_executer et conserve les points de choix repeat Toute autre commande utilise aussi block_exit et permet de remonter le caract re tap comme compl ment d information pour C 212 PrologIA Bulag Bulag R gles pr d finies et proc dures externes lecture dans un fichier L gt input fichier a lire boucle de lecture L boucle de lecture L gt bl
273. entier positif connu ou N k sik est la taille de T Echoue si T n est pas de taille connue et si N est inconnu ou ne repr sente pas une valeur enti re positive size U N Pose la contrainte u N avec les retardements n cessaires si N et la taille de u ne sont pas connus Echoue si N est connu mais ne repr sente pas une valeur enti re positive bound _conc U1 U2 U3 Pose la contrainte u3 u1 u2 Echoue si la taille du tuple u1 n est pas connue conc3 Ul U2 U3 Pose l ensemble de contraintes suivant U3 U1 U2 Ul N1 U2 N2 U3 N3 N3 N1 N2 N1 gt 0 N2 gt 0 avec les ventuels retardements lorsque N1 N2 ou N3 ne sont pas connus arg3 N T1 T2 Cette primitive pose la contrainte T2 N o N est le Ni me argument du tuple T1 Si N est nul T2 est gal l tiquette initiale de T1 c est dire lt gt Echoue si N n est pas un entier positif connu ou si T1 n est pas un tuple 80 ProloglA Bolig Bulag Arbres tuples cha nes et listes Divers arg N T1 T2 Cette primitive pose la contrainte T2 N o N est le Ni me argument du terme T1 Si N est nul T2 est gal l tiquette initiale de T1 En particulier si T1 est un tuple T2 repr sente le Ni me l ment de ce tuple Echoue si N n est pas un entier positif connu known part U1 U2 U3 Pose la contrainte u1 u2 u3 o u2 est un tuple form de la plus grande suite de taille connue des pr
274. er prolog3 prf est prise en compte Celle ci doit commencer par Prolog3 En voici un exemple relativement complexe le texte suivant serait en r alit crit sur une seule ligne PrologIA 1005 Utilisation de Prolog III sur Macintosh Prolog3 c10000 u200 b2000 r100000 Osortie log Ientree log q Ces sp cifications configurent la session Prolog III de la mani re suivante la pile de copie c a une taille de 10000 mots la pile de restauration b une taille de 2000 mots l espace des r gles r dispose de 100000 mots et l espace auxiliaire des alg bres u comporte 200 mots Dans tous les cas il s agit de mots de quatre octets En outre la sortie standard O est redirig vers le fichier sortie log et les entr es I sont lues sur le fichier entree log Finalement l affichage des messages informatifs autres que les messages d erreurs est supprim De mani re g n rale la liste des options a la structure suivante le signe signifie qu un argument doit tre pr sent coll l option fichier Ofichier Yfichier ctaille bfaille rtaille utaille 1006 I O Y c u b r m 1 e q sp cification d un fichier d entr e qui d s de d but de la session Prolog III prendra la place du clavier Ceci implique une utilisation non interactive de Prolog III pour cette raison cette option et sa suivante sont d un usage exceptionnel s
275. era lire le paquet Voir galement e insert ProloglA 325 R gles pr d finies et proc dures externes reinsett F Fonction Insertion de r gles partir d un fichier Classe Proc dure externe Prolog M I Cat gorie Entr es sorties Param tres connus iF Messages d erreur Voir ci apr s Description Ins re des r gles partir du fichier de nom F La seule diff rence avec le pr dicat insert est que si un paquet existe d j reinsert remplace l ancien paquet par sa nouvelle d finition Attention ceci peut tre dangereux une erreur sur le nombre d argument d une r gle l int rieur d un paquet provoquera avec reinsert l crasement des r gles pr c dentes quand on continuera lire le paquet Voir galement e insert 326 ProloglA Bulag Bolig R gles pr d finies et proc dures externes reload F L Fonction Chargement de modules sauv s Classe Proc dure externe Prolog M II Cat gorie Entr es sorties Param tres connus MEL Messages d erreur Cha ne attendue Argument de mauvais type Description Chargement de modules sauv s F cha ne de caract res est un nom de fichier et L est une liste de substitution de pr fixes Cette commande produit le chargement des modules sauvegard s dans le fichier indiqu celui ci doit avoir t produit par une des commandes save ou exit L est une liste de la forme lt prefi
276. ermcap Warning clear_screen non valable pour ce terminal Warning variable term non definie Warning cursor_motion non defini Coordonnees graphiques incorrectes La fenetre associee au bouton n existe pas Argument autorise dans une fenetre de dessin uniquement Unite inexistante ou de mauvais type Regle predefinie non implantee Ecran non initialise pour le graphisme Font non definie Type de fenetre non valide Option non valide a la creation de la fenetre Nombre maximal d items atteint pour ce menu Depassement du nombre de niveaux autorises L item n existe pas ProloglA 527 Bola Annexes A 1436 Impossible d ouvrir un nouveau descripteur d unite 1438 Depasse le nombre d unites d e s ouvertes possibles 1462 Nb de points maximal d un polygone depasse 1471 string_term chaine trop longue 1548 Ikload descripteur non present dans le fichier 1700 Erreur de lecture dans un co_process 1701 Erreur d ecriture dans un co_process 1815 Echec interne dans gr_dialog 1816 Echec dans une regle appelee par gr_dialog 1817 Item incorrect dans er_dialog 1818 gr_dialog erreur interne 528 ProloglA Bola y Annexes B Liste des r gles pr d finies par cat gorie R gles pr d finies Prolog Ill Arbres listes cha nes et tuples AAarg N T1 T2 arg2 N L T arg3 N T1 T2 bound_conc U1 U2 U3 bound_size T N bound_tree T bound_tree T conc3 U1 U2 U3 conc_strin
277. ernes L findall V P L Fonction Collection de solutions Classe R gle pr d finie Prolog II Cat gorie Contr le Param tres connus P Messages d erreur Aucun Description Unifie la liste L avec la collection de toutes les solutions V lorsqu on efface P Le but P doit tre suffisamment connu pour tre ex cut Exemple gt list age paul 22 gt age jean 28 gt age bruno 25 gt gt findall lt N A gt age N A L L lt paul 22 gt lt jean 28 gt lt bruno 25 gt 250 ProloglA Bolig R gles pr d finies et proc dures externes find_pattern S1 S2 N Fonction Recherche de sous cha ne Classe R gle pr d finie Prolog MI Cat gorie Arbres listes cha nes et tuples Param tres connus S1 S2 Messages d erreur Non Description Pose la contrainte N D o D est la position du d but de la cha ne S2 dans la cha ne S1 Si la cha ne S2 n est pas trouv e alors find_pattern choue Exemple gt find pattern 1234567890 3456 Dp p 3 gt find pattern 1234567890 abcd p gt Voir galement e conc_string substring PrologIA 251 Ed L ka Ed ANA R gles pr d finies et proc dures externes e free T Fonction V rifie que T ne repr sente pas un terme suffi samment connu Classe R gle pr d finie Prolog MI I Cat gorie Contr le Param tres connu
278. erreur Suppression de r gles selon un certain mod le Primitive Edimbourg Gestion des r gles et des identificateurs X Non Description Supprime toutes les r gles qui s unifient avec X X doit tre un terme ayant l une des formes d crites en introduction La t te de la r gle d termin e par X doit tre un arbre tiquet par un identificateur connu Au nombre d arguments pr s retract X se comporte comme la primitive retract d arit 2 Exemples consult user titi 1 aa titi 2 aa titi 3 aa retract titi X x1 x 3 Voir galement p aa e abolish suppress retractall PrologIA 399 Bulag R gles pr d finies Edimbourg retractall T Fonction Suppression de r gles selon un certain mod le Classe Primitive Edimbourg Cat gorie Gestion des r gles et des identificateurs Param tres connus zi Messages d erreur Non Description Supprime toutes les r gles dont la t te s unifie avec T lequel n est donc pas une r gle mais une t te de r gle T doit tre un terme dont l tiquette est un identificateur connu et dont le nombre de fils est connu Exemples consult user titi 1 aa titi 2 titi 3 cc retractall titi x x 2 x 1 x 3 Voir galement e abolish retract suppress 400 ProloglA Bolig R gles pr d finies Edimbourg see F Fo
279. erreur R gle inexistante Description Recherche des r gles correspondant un mod le donn Cette primitive s efface autant de fois qu il existe de r gles dont la t te ou encore l identificateur de t te s unifie avec A On peut affiner le mod le en pr cisant la t te T la queue Q et le rang dans le paquet N Si une telle r gle n existe pas alors rule N A T Q produit une erreur Exemple gt list conc l L L gt conc A L L A L gt conc L L L gt rule l conc T Q T conc v149 v149 Q I gt rule 2 conc X Y Z T Q X v149 v150 Z v149 v151 conc v149 v150 y v149 v151 conc v150 y v151 Remarque A doit tre de type idt PrologIA 335 Ed L a La Ed ANA R gles pr d finies et proc dures externes n rule nb lt I A gt N Fonction Nombre de r gles d un paquet Classe R gle pr d finie Prolog MI I Cat gorie Gestion des r gles et des identificateurs Param tres connus LA Messages d erreur R gle inexistante Description Compte les r gles du paquet d termin par l identificateur I et l arit A N est alors unifi avec le nombre de r gles de ce paquet Echoue si I et ne sont pas connus ou si le paquet n existe pas Exemple gt list conc L L gt conc A L L A L gt conc L L L gt rule nb lt conc 3 gt N Voir galement e rule cur
280. ers dont vous avez besoin pour utiliser Prolog II Le dossier sources et objets du disque 2 et disque 3 contiennent les fichiers requis pour augmenter Prolog III par l ajout de vos propres r gles pr d finies crites en C ou tout autre langage ou bien augmenter votre application par des appels Prolog 1 Avec un tout petit syst me et sans multifinder 1002 ProloglA Bolig e Utilisation de Prolog III sur Macintosh disque 1 H EC disque 3 a D 0 0 edinburg mo prolog bst prolog err prolog3 lex prolog sqn agii Ls Es 2 initial3 psw LISEZ MOI prolog prf exemples sources et objets Fichiers indispensables pour utiliser Prolog Ill Prolog III Fichier ex cutable contenant l interpr te de Prolog II C est une application Macintosh ordinaire que l on d marre la souris par un double clic prolog3 bst Fichier n cessaire au d marrage de l interpr te prolog3 lex Fichier de donn es pour l analyseur syntaxique de Prolog III prolog3 sya Messages d erreur de l analyseur version anglaise prolog3 syf Messages d erreur de l analyseur version fran aise prolog3 syn Messages d erreur de l analyseur Il s agit en fait d une copie de l un des fichiers prolog3 sya ou prolog3 syf prolog3 era Messages d erreur de l interpr te version anglaise prolog3 erf Messages d erreur de l interpr te version fran aise PrologiA 1003 Ut
281. es appel syst me de contraintes On distingue quatre familles de contraintes Prolog IA 437 A Syntaxes 0 e les contraintes g n rales d galit et de diff rence de termes e les contraintes de typage de termes e les contraintes num riques inf rieur et sup rieur ou gal e la contrainte bool enne implique Voici la syntaxe des syst mes de contraintes lt syst me de contraintes gt lt contrainte gt lt contrainte gt lt contrainte gt lt terme gt lt terme gt lt terme gt lt terme gt lt terme gt gt lt terme gt lt contrainte de typage gt lt contrainte Sup gt lt contrainte Inf gt lt variable gt freeze lt terme gt lt contrainte Sup gt lt terme gt lt sup gt lt terme gt a gt b lt contrainte Sup gt lt sup gt lt terme gt 1 gt a gt b gt c lt contrainte Inf gt lt terme gt lt inf gt lt terme gt lt contrainte Inf gt lt inf gt lt terme gt Nous pouvons donner la syntaxe des contraintes de typage 438 ProloglA Bolis ri Syntaxes lt type d arbre gt lidt lboolt numt chart tuple lid fbool num char lt contrainte de typage gt lt terme gt lt type d arbre gt lt terme gt lt terme gt Les syst mes de contraintes suivants sont quivalents t lid et t lidt t 0 t bool et t boolt t 0 t num et t Inumt t 0
282. es arithm tico bool ennes La r gle est simple elles sont toutes incorrectes Autrement dit il n y a pas en Prolog III d expression arithm tique correcte comprenant des sous expressions bool ennes pas plus qu il n y a d expression bool enne correcte comprenant des sous expressions arithm tiques Cela d coule de la d finition des op rations arithm tiques et des op rations bool ennes Les formules suivantes sont donc toutes incorrectes 1 1 X amp Y Z 2 0 3 X amp Y 2 4 On accepte sans grande difficult ces limitations qui somme toute appartiennent tous les langages propres On peut s accommoder moins facilement de la restriction suivante en Prolog Ill il n y a aucun op rateur fournissant un r sultat bool en d coulant de propri t s des nombres Les op rateurs qui s appliquent des nombres donnent tous des nombres pour r sultat tandis que ceux qui rendent des bool ens n ont de sens qu appliqu s des bool ens Des expressions comme la suivante sont donc fondamentalement incor rectes O0 lt X amp X lt 9 Mais alors quel est le statut en Prolog IIT de l galit l in galit les comparaisons num riques etc Il ne faut pas oublier ceci lt lt gt gt ne sont pas des op rateurs Ces symboles servent exprimer des relations lesquelles servent crire des contraintes Le propre d une contrainte est d tre v rifi e ou non et en p
283. es moyens r alisant pratiquement l insertion la suppression et la modification des r gles ainsi que leur sauvegarde et restauration l aide de fichiers magn tiques Du coup on en profitera pour traiter des entr es sorties et finalement de tous les autres points ayant trait au monde environnant le syst me Prolog II D cembre 1990 Pr ologlA Doli L environnement 4 1 Le contr le A chaque tape de l ex cution d un programme l interpr te Prolog II doit faire deux choix l un pour choisir un but dans une suite de buts ex cuter l autre pour choisir la r gle qui servira l ex cuter Au chapitre Concepts de base nous avons donn un mod le de l ex cution d un programme Prolog II voir le chapitre Concepts de base 1 W toti tn S 2 s0 gt S1 Sm R 3 W s1 Sm t1 au tn SURU s0 t o et nous avons expliqu comment se font les deux choix mentionn s le but choisi est toujours le premier l ment de la suite des buts ex cuter ici to les r gles choisies pour l ex cuter sont toutes les r gles dont la t te s unifie avec le but en question c est dire les r gles s s1 Sm R pour lesquelles le syst me S U R U s0 to est soluble toutes ces r gles sont examin es dans l ordre o elles ont t crites Prolog III tant un langage fonci rement d claratif la notion de contr le est n cessairement r duite sa plus simple ex
284. es de base de Prolog IMI il existe deux importantes restrictions La premi re concerne les termes chapeaut s par un op rateur arithm tique les expressions arithm tiques doivent tre lin aires Cela signifie que dans une multiplication 41 a2 un des deux op randes ne doit pas contenir de variable et que dans une division a1 a2 le deuxi me op rande a ne doit pas contenir de variable Cela interdit des termes comme 2x 3 4y 5 OU x y La deuxi me restriction concerne l op ration de concat nation dans une concat nation la longueur de l op rande gauche doit tre connue Cela interdit l criture de termes comme x y sauf si une contrainte comme x lt zl z2 z3 gt OU x 3 les contraintes sont expliqu es au 87 impose x de poss der une longueur d termin e ici 3 ProloglA 37 Concepts de base Bien que ces limitations soient fondamentales au niveau des m canismes de base de Prolog III dans la plupart des situations pratiques vous pourrez ne pas en tenir compte un dispositif de retardement automatique se chargeant votre place de geler l expression conflictuelle jusqu ce qu assez de variables soient connues pour que l expression puisse tre consid r e comme l gitime Ce m canisme est d crit au chapitre Retardements Exemples Voici une collection de termes corrects et d expressions erron es illustrant la syntaxe des termes et justifiant un certain nombre de compl
285. es et pr dicats valuables 6 Exemples de programmes Calcul bancaire Il s agit de calculer la suite de versements successifs qu il faut effectuer pour rembourser un capital emprunt une banque On suppose qu entre deux versements s coule toujours le m me temps et que pendant cette dur e le taux d int r t r clam par la banque est de 10 L ensemble des faits d finis par le programme sera l ensemble des arbres de la forme versements_capital X C et o X repr sente la liste des versements n cessaires pour rembourser le capital C avec un int r t de 10 entre deux versements Le programme lui m me se r sume deux r gles versements capital lt gt 0 gt versements_capital lt V gt X C gt versements_capital X C 10 100 C V La premi re r gle exprime qu il n est pas n cessaire de faire de versements pour rembourser un capital nul La deuxi me r gle exprime que la suite des n 1 versements pour rembourser un capital c consiste en un versement v 108 ProloglA Bulag Bulag Les contraintes num riques et d une suite x de N versements permettant de rembourser le capital c augment de 10 d int r ts mais diminu du versement v effectu Ce programme peut tre utilis de diff rentes fa ons Une des plus specta culaires est de demander pour quelle valeur de v la suite de versements lt V 2V 3V gt permet de rembourser 1000F Il suffit de poser la requ
286. es graphiques Lorsque cette base est charg e les deux boutons sont dessin s par le but gt gr_draw_button wtButton gr_button_hit b lt x y gt t b est l identificateur d acc s la base de donn es de boutons d crite ci dessus Cette r gle s efface si x et y sont les coordonn es d un point int rieur l un des boutons de la base de donn es lt b 3 gt On unifie ensuite t avec le troisi me argument du bouton concern La primitive gr_button_hit combin e avec gr_click permet d crire facilement une boucle de scrutation des boutons Saisie de texte gr_editf lt s1 p1 p2 gt r s k gr_editf lt s1 p1 p2 gt x1 y1 x2 y2 s k Cr e un rectangle d dition dans la fen tre graphique courante La fin d dition est provoqu e par un retour chariot un caract re de tabulation ou un clic en dehors du rectangle d dition Si k n est pas une variable le rectangle et son texte sont seulement dessin s sans dition s1 est la cha ne qui sert initialiser le champ d dition pl p2 sont des entiers d finissant la position de d but et de fin de s lection du texte repr sent e en vid o inverse La valeur 0 pour p1 indique la position qui pr c de le premier caract re du texte p2 est la position du caract re qui suit le dernier dans la s lection Initialiser avec un champ vide correspond aux valeurs lt 0 05 ProloglA 485 Primitives graphiques 7 d finit la position du rec
287. es op rations et les relations qui permettent d tablir des contraintes sur ces objets Ensuite nous pr sentons ce qu est un programme Prolog III ainsi que la mani re dont il est ex cut D cembres 1990 ProloglA Concepts de base 1 Arbres Quelle est la nature des objets manipul s C est une des premi res questions auxquelles il nous faut r pondre pour expliquer Prolog II Le langage est tout fait coh rent et uniforme TOUS LES OBJETS MANIPUL S PAR PROLOG III SONT DES ARBRES Certains sont tr s complexes voire infinis tandis que d autres sont r duits un unique n ud Certains ont une d nomination particuli re alors que d autres ne peuvent tre design s qu au moyen d une op ration qui les construit ou d un syst me de contraintes dont ils sont solution N ayant pas reproduire les d monstrations formelles qui justifient les algorithmes du c ur de Prolog II nous ne donnerons pas ici de d finition rigoureuse des arbres La notion intuitive habituelle qui assimile le concept d arbre celui d ensemble organis hi rarchiquement nous suffira amplement A AINS Cette hi rarchie est incarn e dans un ensemble de positions ou n uds et un ensemble de fl ches reliant ces positions On dit que les n uds auxquels aboutit une fl che issue d un n ud n sont les fils de n L ensemble des fils d un n ud donn est toujours ordonn ne serait ce que par l ordre dans lequel ces n u
288. es r gles pr d finies qui constituent la biblioth que syst me de Prolog II Note 3 Lorsqu une r gle contient une d claration de contexte celle ci ne devient effective que lorsque la r gle est ex cut e et non au moment de sa lecture Dans l exemple suivant l identificateur abr g peche est compl t en def peche et non en fruits peche puisque la d finition du contexte new ne sera effective que lors de l ex cution du programme pomme gt pomme gt set _ context new fruits peche l sys def peche set_context rom Permet de r installer comme contexte courant un contexte pr c demment d fini L argument nom doit tre l identificateur ou la cha ne associ e au contexte en question lors de sa d finition current_context to t t2 t3 current_context to Obtention du nom et de la d finition du contexte courant to nom du contexte courant identificateur ou cha ne t suite_explicite t2 suite_implicite t3 pr fixe_par_d faut ProloglA 181 L environnement close_context_dictionary s D finit l ensemble actuel d identificateurs de la famille de pr fixe s comme tant la partie ferm e de cette famille Les identificateurs ajout s la famille apr s l ex cution de cette commande ne seront pas automatiquement incorpor s cette partie ferm e add_implicit s1 s2 remove_implicit s1 s2 Ajoute resp enl ve de la partie ferm e d
289. es trait es et les consid rations d efficacit li es la r alisation d un langage de programmation Prolog III impose un certain nombre de restrictions sur ces contraintes En ce qui concerne les tuples cette restriction porte principalement sur le fait que tout tuple figurant en membre gauche d une op ration de concat nation doit tre de taille explicitement connue La seconde restriction d coule naturellement de celle impos e aux arbres savoir que pour toute contrainte de taille portant sur un tuple le nombre repr sentant celle ci doit tre explicitement connu Dans le cas o ces restrictions ne sont pas respect es un m canisme de retardement que nous d taillerons par la suite est mis en place voir le chapitre enti rement consacr aux retardements ProloglA 17 Bulag Arbres tuples cha nes et listes UVW lt E gt Z U 4 V 2 Tout tuple figurant en membre gauche d une op ration de concat nation doit tre de taille explicitement connue Exemples de contraintes sur les tuples Voici un certain nombre de syst mes de contraintes corrects portant sur des tuples lt 1 2 3 gt V Z lt E gt U vV U V W U 100 U lt E F gt V W U 4 U V W T U 2 V 4 On notera dans ces exemples que pour toute concat nation la taille des op randes gauches est connue Voici cette fois quelques ex cutions de ce types de contraintes qui montrent l ensemble des
290. essions de type Constante Variable et Expression Num rique Variable 6 est une expression num rique correcte mais non lin aire Le traitement correspondant et plus particuli rement celui des contraintes faisant intervenir de telles expressions est particulier et sera d taill dans les chapitres qui suivent 7 est un terme correct qui repr sente un arbre tiquet par la valeur 2 et dont le fils unique est repr sent par la variable x Ce n est donc en aucun cas une expression num rique 8 est un terme form d une unique variable d identificateur x2 et pas un produit de la variable x par la valeur 2 9 et 10 exigent un parenth sage voir chapitre Syntaxes PrologiA 99 Les contraintes num riques 11 n est pas une expression num rique m me pas un terme Prolog II C est tout de m me un objet syntaxique du langage puisque c est une contrainte num rique On veillera cependant ne pas confondre ces deux types d objets Les relations On trouve pour la partie num rique de Prolog III deux types de relations les relations una res qui serviront pr ciser le caract re num rique de certains arbres ce qui revient dans les faits formuler des contraintes de type et les relations binaires utilis es pour construire des contraintes num riques proprement dites Voici les diff rentes relations qui permettent de construire des contraintes num riques Relations unaires X n
291. et aux expressions dans lesquelles ils apparaissent La notion de contrainte est expliqu e en d tail au 7 L exemple 4 montre divers cas o la syntaxe de Prolog III permet d omet tre l op rateur Une criture quivalente de cette expression est X 3 Y 5 Z 4 14 9 17 T Les exemples 8 et 9 sont des expressions non lin aires un dispositif de retardement automatique est donc mis en place On se r f rera pour plus de d tails sur ce sujet au chapitre Retardements 42 PrologIA Bolig Concepts de base Expressions num riques incorrectes 5 X Y 1 4 5X 2 X5 3 XY 4 3 X 5 En tant qu expression arithm tique 5 x y est incorrect Cependant ce terme est l criture correcte d un arbre ayant 5 pour tiquette et le nombre r sultat de l addition x y pour unique fils L exemple 4 5x est syntaxiquement incorrect Pour indiquer les quatre cinqui mes de la valeur repr sent e par x il faut crire 4 5 x L expression x5 n est pas incorrecte mais elle ne repr sente pas une expression arithm tique uniquement une variable ayant ce nom De la m me mani re xy est un identificateur non un produit Enfin l expression 3 x doit tre r crite 3 x Expressions bool ennes 1 1 o 2 X Y 3 22 4 X amp xX 5 X amp 1 6 A amp B gt C amp D 7 U3 amp X1 lt gt X3 o 8 PrologIA 43 Concepts de base Expressions mixt
292. et de tester la pr sence d une r gle L ex cution de cette primitive r ussit s il existe une r gle de nom i et d arit a Si a est une variable et i est connu elle num re successivement toutes les arit s de r gles de nom i Si i est une variable et a est connu elle num re successivement tous les noms de r gles d arit a Enfin si a et i sont des variables cette primitive num re successivement tous les couples lt i a gt correspondant aux r gles du module associ au pr fixe par d faut du contexte courant insert reinsert Insertion de r gles Cette r gle pr d finie fait basculer le syst me dans un mode dans lequel les nonc s r gles commentaires et directives lus sur l unit d entr e courante sont ajout s dans l ordre dans lequel ils sont lus au programme courant 186 ProloglA Bolig L environnement Les directives set_context module etc sont ex cut es imm diatement lorsqu elles sont rencontr es Le mode insert se termine soit quand un nonc vide est trouv soit si l on rencontre la fin du fichier d entr e Exemple gt insert conc y y gt conc e x y e z gt conc x y 2z gt Si une erreur de syntaxe est rencontr e un avertissement est affich et un certain nombre de caract res en principe tous les caract res jusqu un ou jusqu la fin de la ligne sur l unit console sont ignor s insert provoque u
293. et il serait dommage que celles ci apparaissant dans des contraintes ne viennent perturber la clart si l on peut dire des ensembles de contraintes r sultats Voici pour finir quelques exemples de simplification de syst mes e La simplification du syst me a x 1 a x 1 sur le sous ensemble a donne le syst me a 1 Cet exemple est relativement trivial puisque le syst me initial est d j quivalent au syst me a 1 e La simplification de a x b y a amp x bey sur a b c fournit le syst me alb 1 On remarque sur cet exemple que l une des deux variables a ou b doit tre gale 1 En fait aucune solution du syst me initial ne comporte la fois les affectations 4 0 et b 0 e Enfin le syst me a gt b x x a amp c y b x amp c simplifi sur a b c est gal a gt c b agb amp c 0 Pas de commentaires particuliers sinon qu il est assez difficile de le v rifier la main Essayez donc R gles pr d finies sp cifiques Les r gles pr d finies sp cifiques aux bool ens sont peu nombreuses Les voici succinctement nonc es On retrouvera ces r gles dans le chapitre exclusivement consacr aux r gles pr d finies et pr dicats valuables de Prolog III 128 ProloglA Bulag Bolig Les contraintes bool ennes bool B V rifie que le terme B repr sente une valeur bool enne connue is_bool B V rifie que le terme B repr sente une valeur bool enne ou
294. ette facilit on peut passer 0 pour argc et NULL pour argv Rappelons que lorsqu il existe un fichier nomm prolog3 prf dans le r pertoire courant ou dans celui contenu dans la variable d environnement PrologDir si elle est d finie sa premi re ligne est interpr t comme une ligne de commande unix et les options y sont lues Dans ce cas les arguments argc et argv sont ignor s PrologIA 1025 Utilisation de Prolog III sur Macintosh autoprolog informe Prolog II qu il est le programme principal ou qu il est seulement appel de temps autre Les valeurs possibles donner sont PROMAIN si Prolog III est le programme principal PROCALL si Prolog III est utilis comme module externe Pro3lnitial argc argv autoprolog Cette fonction alloue puis initialise Prolog II Cette initialisation comprend le d marrage de Prolog III Il peut se passer un assez long moment avant qu il ne rende la main selon la taille de l tat qu il doit charger Cette fonction retourne un statut d erreur lequel est ERR3_NOERR lorsqu il n y a pas d erreur et que Prolog II a pu allouer charger initialiser son espace d marrer Toutes les constantes PROMAIN PROCALL ERR3_NOERR etc sont d finies dans le fichier d ent te macuser h qu il faut donc inclure Appel int Pro3Goal g char g Pro3Goal g On appelle Prolog III travers cette unique fonction Son argument g est une cha ne de caract res C te
295. eurs Param tres connus Aucun Messages d erreur Non Description Liste sur l unit courante de sortie toutes les r gles du module d termin par le pr fixe par d faut du contexte courant Remarque Les r gles sont d abord d cod es puis ensuite list es sur l unit courante de sortie Elles peuvent donc avoir une forme qui diff re l g rement de leur forme d origine 288 ProloglA Bolig R gles pr d finies et proc dures externes list T Fonction Impression de r gles Classe R gle pr d finie Prolog MI Cat gorie Gestion des r gles et des identificateurs Param tres connus Voir ci apr s Messages d erreur Argument de mauvais type R gle inexistante Description Liste sur la sortie courante le ou les paquets de r gles indiqu s par T qui doit tre un terme de la forme indiqu e ci dessous s d signe une cha ne de caract res i un identificateur et v une variable s Tous les paquets de r gles du module correspondant au pr fixe s i Le s paquet s de r gles ayant i pour acc s i i2 in Tous le s paquet s de r gles ayant i pour acc s puis le s paquet s ayant i2 pour acc s etc v Tous les paquets de r gles du module correspondant au pr fixe par d faut v est unifi avec une liste de doublets de la forme lt ident arit gt PrologIA 289 2 gens 2 Bol R gles pr d finies et proc dures externes L list lt I A gt
296. ex lt nom gt lt lettre gt lt alphanum rique tendu gt lt identificateur gt lt pr fixe gt lt identificateur abr g gt sys outm lt identificateur abr g gt outm lt identificateur abr g gt lt lettre gt lt lettre gt lt alphanum rique tendu gt Un identificateur complet se compose donc d un nom pr c d d un pr fixe dont il est s par par le caract re deux points Un identificateur abr g est ce qui reste d un identificateur complet lorsqu on omet le pr fixe et le s parateur Le pr fixe peut tre vide ou bien tre un mot ou encore tre compos de plusieurs mots s par s par des deux points 176 ProloglA Bolig Bolig L environnement Un identificateur complet comporte toujours au moins une occurrence du caract re tandis qu un identificateur abr g n en comporte aucune Par exemple les trois premiers identificateurs ci dessous sont complets le dernier est abr g grammaire pluriel sys env screen clear screen paul paul Les pr fixes respectifs de ces trois premiers exemples sont grammaire sys env screen et le pr fixe vide Les identificateurs abr g s associ s sont respectivement pluriel clear screen et paul On appelle famille correspondant un pr fixe donn l ensemble des identifi cateurs ayant ce pr fixe Il n y a pas de hi rarchie dans les familles lorsqu un identificateur complet comporte plusieurs o
297. expression num rique Classe R gle pr d finie Prolog II Cat gorie Contraintes num riques Param tres connus R1 Messages d erreur Expression non born e Erreur 59 Arguments de mauvais type Erreur 60 Description Calcule la borne sup rieure m i e le plus petit des majorants de R1 et ajoute au syst me de contraintes courant la contrainte R2 m Provoque une erreur lorsque R1 ne peut tre typ num rique Erreur 60 ou encore lorsque l expression num rique R1 n est pas born e sup rieurement Erreur 59 Exemples gt upper bound R R R 2X Y X lt 2 Y lt 3 GRUS Se dana gt upper bound R R R 2X Y X lt 2 Err 59 Expression non bornee lors d un calcul d extremum gt upper bound R R R 2X Y X lt 2 Y lt 3 gt Remarques On rappelle que dans l ensemble des r els toute partie non vide qui poss de un majorant admet une borne sup rieure On veillera donc au pr alable borner R1 sup rieurement On notera galement que l ex cution de upper_bound R1 R2 ne pose pas la contrainte R1 R2 On pourra utiliser la primitive block pour la r cup ration des erreurs Voir galement e lower bound maximum minimum maximize minimize 295 mxxxiv ProloglA A gt 2 L2 bd L2 a R gles pr d finies et proc dures externes maximum R1 R2 Fonction Maximum d une expression num rique Classe R gle pr d finie Prolog II Cat gorie
298. ez probable ment le faire maintenant on tape un petit programme qu on essaye puis un autre et encore un autre etc Or Prolog II conserve tous ces programmes en m moire et on finit immanquablement par obtenir des erreurs qui traduisent des conflits de noms comme Erreur 46 Regle deja definie Pour l viter remettez z ro l espace des r gles entre deux exemples en ex cutant la commande gt kill module gt Les tuples et les cha nes de caract res Un tuple est une suite d objets Prolog Le tuple not lt 41 42 43 gt repr sente la suite de longueur 3 form e des l ments 41 42 a3 quelle que soit la nature de ces l ments Le tuple vide s crit naturellement lt gt On peut indiquer qu une variable x est de type tuple en ajoutant la contrainte x tuple On peut aussi imposer que x soit un tuple de longueur n donn e par x n L op ration de base sur les tuples est la concat nation not e par point Observons les exemples suivants gt x lt 1 2 3 gt lt 4 5 gt x lt 1 2 3 4 5 gt gt x y z y 2 y lt 1 2 gt x lt 1 2 gt z y lt 1 2 gt gt x y z y 2 12 PrologiA Bolig Bolig D buter avec Prolog III x y z y 2 N B Les exemples pr c dents sont donn s titre explicatif et la r ponse fournie par la machine peut avoir une forme diff rente mais quivalente Si on souhaite obtenir le pr
299. f Lecture d une suite de termes Prolog MI Lit la plus grande suite de caract res qui constituent l expression crite syntaxiquement correcte d une suite de termes Prolog MI ensuite tente l unification de t avec le premier des termes lus Les caract res blancs qui suivent le dernier terme lu sont lus eux aussi Exemple gt in term t in char c nom marie poids Dupont 1 755 10 est un terme t nom marie poids Dupont 1 151 2 12 gt 192 ProloglA Bulag Bolig L environnement in_sentence f1 tz t3 Lit une phrase qui se termine par ou et la met sous la forme de trois listes respectivement unifi es avec f1 t2 et t3 t est la liste des unit s lexicales mots nombres caract res sp ciaux etc constituant la phrase 13 est la liste obtenue en rempla ant chaque lettre majuscule apparaissant dans un l ment de t par la lettre minuscule correspondante t2 est la m me chose que t3 mais chaque l ment de t3 qui correspond un identificateur connu dans la famille du pr fixe par d faut du contexte courant a t remplac par le symbole conventionnel lt gt pour indiquer ce fait Exemple gt truc gt in sentence tl t2 t3 truc Truc et line sont connus t1 lt truc Truc et line sont connus gt 2 s Ml es Met Linet Sont connus Mrs t3 lt truc i 5 h truc r et L lin
300. flottants ne constituent pas un autre domaine num rique disjoint de celui des nombres rationnels Autrement dit il n est pas insens de se demander si la contrainte 75 5 755 10 est satisfaite ou non Plus encore non seulement une telle contrainte a un sens mais il faut savoir que Prolog III s efforce de la traiter de la mani re la plus pr cise possible ainsi deux nombres dont l un au moins est flottant sont trouv s gaux si leur cart est inf rieur un certain seuil qui prend en compte les nombres en question les caract ristiques du codage des nombres flottants sur votre syst me h te ainsi qu un savant calcul d erreur en outre la contrainte d in galit est trait e de mani re tout fait coh rente avec la pr c dente ProloglA 95 Les contraintes num riques Voici en quelques points la bonne mani re d envisager les ensembles de nombres que traite Prolog II 1 Le domaine num rique est constitu par l ensemble des nombres r els au sens math matique du terme comprenant en particulier les nombres ration nels les nombres alg briques et les nombres transcendants m me si certaines de ces familles de nombres restent en pratique inaccessibles 2 Les nombres qui ont t exprim s sous la syntaxe des rationnels repr sentent pour l utilisateur des donn es exactes Les quatre op rations arithm tiques sont elles aussi qualifi es d exactes Les r sultats d op rations exactes
301. fn S Avec deux cas particuliers int ressants ProloglA 63 Concepts de base si la suite t1 t2 tn est vide alors la requ te se r sume demander la r solution du syst me S si le syst me S est vide et n 1 alors la requ te se r sume la question pour quelles valeurs des variables le terme t se transforme en un fait d fini par le programme Pour expliquer comment Prolog III calcule la r ponse ces questions nous allons introduire une machine abstraite Il s agit d une machine non d terministe dont l unique instruction de base est d crite par les trois formules suivantes 1 W fot1 tn S 2 50 gt S1 Sm R 3 W s1 Sm t1 tn SURU s0 t o La formule 1 repr sente l tat de la machine un instant donn La requ te courante est t t1 tn S W est l ensemble des variables auxquelles on s int resse La formule 2 repr sente la r gle du programme utilis e pour changer d tat Au besoin on a renomm certaines de ses variables pour qu elle n en ait aucune de commune avec 1 Les autres r gles du programme auraient pu tre employ es aussi bien utiliser celle ci plut t qu une autre r sulte d un choix La formule 3 repr sente le nouvel tat de la machine apr s l application de la r gle 2 Le passage dans cet tat n est possible que si le syst me de contraintes S U R U s fo poss de une solution pour laquelle chacun des
302. form de valeurs bool ennes o le rang de tout l ment gal 1 est un nombre premier on proc de de la mani re suivante pr dicat cribles pour un l ment donn et un nombre donn N en commen ant 2 et en initialisant le tuple de mani re ce que tous les l ments soient gaux 1 si sa valeur est o on la renvoie sinon on renvoie 1 et on unifie o tous les l ments multiples de N par simple d calage i e l aide de la concat nation Cette derni re op ration est r alis e par le pr dicat crible Voici une ex cution gt nombres premiers Y Y 12 Vs et Mt NEO M O AM E 1 0 AE O ststs ProloglA 91 LISE PITA T HERITAGE Bolig Les contraintes num riques 1 Introduction 2 G n ralit s Les nombres Expressions num riques Les relations Contraintes num riques Exemples de contraintes num riques Restrictions Forme normale R gles pr d finies et proc dures externes sp cifiques Retardement des contraintes non lin aires Formats d entr e sortie Exemples de programmes Calcul bancaire Crypto arihm tique Remplissage d un rectangle par des carr s a a Que trouve t on dans ce chapitre Parmi les diff rents domaines sur lesquels on peut faire porter des contraintes en Prolog III celui pour lequel on pressent d ores et d j le plus d applications est certainement le domaine num rique En effet la possibili
303. g II est galement fourni la fin du manuel D cembre 1990 Pr ologlA R gles pr d finies et proc dures externes 1 Introduction Ce chapitre pr sente les r gles pr d finies et proc dures externes de Prolog II Cette partie du manuel est certainement celle qui demeurera au fur et mesure de vos d veloppements la plus utile C est pourquoi nous avons essay de vous faciliter la t che en donnant pour chacune de ces primitives un mini mode d emploi et en multipliant les acc s pertinents au reste du manuel Ainsi pour chacun de ces pr dicats on trouvera les r f rences suivantes Fonction Classe Cat gorie Param tres connus Message d erreur d crit en quelques mots les fonctionnalit s du pr dicat d termine s il s agit d une proc dure externe d une r gle pr d finie ou d une fonction valuable et donne les compatibilit s Prolog II et Edimbourg renvoie g n ralement au chapitre concernant ce type de pr dicat et donne souvent une sous cat gorisation informe sur la n cessit que certains des arguments soient connus l appel de la primitive concern e renseigne sur la pr sence ventuelle d un ou plusieurs messages d erreurs attach s une mauvaise utilisation de la primitive A noter que dans certains cas on pr f re chouer sans imprimer de message d erreur De plus les arguments pour chacune de ces primitives correspondent
304. g Outils de mise au point 5 Informations On a la possibilit d obtenir l impression de diverses informations sur la d monstration courante au moyen des commandes locus ls resol rs et sur les diff rents choix en attente gr ce la commande chpt la commande sol montre l tat du syst me de contraintes portant sur les variables de la requ te printbox sert rafra chir le statut du port courant chpt tous ports SYNTAXE chpt DESCRIPTION Affiche les points de choix en attente du plus r cent au plus ancien du haut vers le bas L impression est au format suivant CHOICE POINTS new 5 2 r3 Dessert glace 6 4 3 r2 Viande porc 7 3 2 r2 Plat p i 2 2 r2 HorsDoeuvre pate 6 CHOICE POINTS old Les nombres affich s correspondent ceux du format d une ligne de description de port c a d la profondeur le niveau entre et le num ro de r gle utiliser entre et Les termes imprim s correspondent aux t tes de r gle en attente d essai Cet exemple indique que la r gle n 3 indique que c est la derni re du paquet de nom Dessert sera essay e en premier REMARQUES Pour les pr dicats pr d finies un point d interrogation remplace les informations inconnues ou cach es locus tous ports ProloglA 2011 Bulag Outils de mise au point SYNTAXE locus locus nb niveau DESCRIPTION Affiche l endroit le nive
305. g S in_term T inl S input F input_is F insert insert F line next_char C next_char C no_echo out T outc T outI T outm S1 2 SN outml S1 S2 SN output F output_is F reinsert reinsert F reload F L ProloglA 531 Annexes Bolig Gestion des r gles et des identificateurs V rification de types 532 add_implicit S1 52 assert T Q asserta T Q assertz T Q assert T Q close_context_dictionary S current_context TO T1 T2 T3 current_context T0 current_predicate lt I A gt def_array I N dictionary dictionary L dictionary M L end_module kill module S list list lt I A gt list lt I A gt N list lt 11 A1 gt lt In An gt list T module new redef_array tab N remove_implicit S1 S2 retract T Q rule N AT Q rule N T Q rule T Q rule nb lt I A gt N set_context I S S D set_ident I N suppress I suppress I A suppress I N undef_array tab bool B char C dot T ident I integer N is_bool B is_char C is_ident I is_leaf T is_num R is_tuple U is_univ T num R PrologiA Bulag Annexes rational R real F string S tuple U R gles pr d finies Edimbourg Arbres listes cha nes et tuples Contr le Evaluation de fonctions pr d finies Entr es Sorties PrologIA X Y X Y X Y X Y functor T E N member X L na
306. g S1 S2 S3 find_pattern S1 2 N known_part U1 U2 U3 size U N substring S1 N1 N2 52 Contr le assign I T assign tab N T block E B block_exit E block E C B block_exit E C bound T cut default T1 T2 dif T1 T2 eq T1 T2 fail findall v p l free T freelabel T ProloglA 529 Annexes Bolig Contraintes num riques Conversion Environnement 530 freeze T P known T not T predefined T repeat val T1 T2 bound_mult N1 N2 N3 div N1 N2 N3 enum R enum R R1 enum R R1 R2 gcd N1 N2 N3 Icm N1 N2 N3 max_value R1 R2 min_value R1 R2 mod N1 N2 N3 mult N1 N2 N3 numden R N1 N2 particular_value R1 R2 pgcd A B P ppcm A B P trunc R N char_code C N list_string L S list_tuple L U split U L string_bool S B string_ident P S I string_ident S I string_integer S N string_real S F cpu_time N edinburgh edit I exit exit S garbage_collection get_config S V get_configuration U getenv 51 52 no_trace prologlll quit ProloglA Bulag Annexes Entr es Sorties quit N reset_cpu_time resume_trace save save L F save S set_config S V set_configuration U state suspend_trace sys_command S trace trace_file S close_input close_input F close_output close_output F echo in_char C in_char C in_ident I in_integer N in_real R in_sentence T1 T2 T3 in_sentence T in_strin
307. ger h p d d radis p veau h fruit d radis p boeuf h fruit d radis p porc h fruit d radis p sole h fruit d radis p sole h glace d radis p thon h fruit d pate p sole h fruit gt Si nous voulons sauvegarder nos modifications dans un fichier par exemple menubis p3 il nous faut taper les commandes suivantes gt output menubis p3 list close_output gt La commande output fait basculer la sortie courante sur le fichier donn en argument list va nous lister notre programme sur cette sortie et close_output ferme la sortie courante et bascule sur la sortie pr c dente dans notre cas l cran Nous pouvons ensuite quitter la session toujours par gt quit Une fois revenu sous notre syst me d exploitation on peut v rifier que le fichier menubis p3 a bien t cr comprenant les modifications que nous avons faites plus haut ProloglA 11 D buter avec Prolog III 3 Quelques petits exemples Prolog II est un langage qui manipule outre les arbres que l on supposera bien connus les tuples les expressions num riques lin aires les formules bool ennes Tous ces objets peuvent tre solutions de syst me de contraintes Nous allons voir dans ce paragraphe travers quelques petits exemples comment manipuler ces diff rents objets ATTENTION Quand on joue avec Prolog II comme vous all
308. gt lt terme 649 gt tuple Iboolt lbool Pnumt num chart char lidt lid lfreeze lt terme gt galit g n rale diff rence g n rale implique inf rieur inf rieur ou gal sup rieur sup rieur ou gal contrainte de taille typage typage typage typage typage typage typage typage typage gel Les syst mes de contraintes suivants sont quivalents t t t t mman ma lid Ibool Inum char mman ma t t t t lidt lboolt Inumt chart t t dt dt oO NI YO US w Donnons quelques exemples de contraintes correctes Xi num Flidt A B I J Voici quelques exemples de contraintes invalides x lt v lt z 1 2 Dans les cas o les contraintes n agissent pas quand elles sont en position de sous terme par exemple celle ci se comportent comme tout arbre Il en Mtoto 2 A gt B amp C F 3 L 7N U V 3X 4 5Y on ne peut pas emboiter les lt ce n est pas une contrainte va de m me avec les syst mes Voici alors ce qui est produit 454 PrologilA Bolig A Syntaxes tl t2 construit l arbre sys t1 t2 t1 t2 j sys t1 t2 t1 lt t2 j sys lt t1 t2 t1 lt t2 construit l arbre sys lt t1 t2 t1 gt t2 sys gt t1 t2 t1 gt t2 sys gt t1 t2 t1 tuple sys tuple t1 t1 boolt sys boolt t1 t1 freeze t2 sys freeze t1 t2 t1 t
309. gt 0 I J K lt 10 plat P I viande P I plat P I poisson P l horsDoeuvre radis 1 horsDoeuvre pate 6 viande boeuf 5 viande porc 7 poisson sole 2 poisson thon 4 dessert fruit 2 dessert glace 6 Une Question repasLeger H P D 536 ProloglA Bola roy Annexes 2 Calculs sur les grands nombres fact p3e Le programme factorielle Factorielle N N N 1 N 2 2 1 factorielle 0 1 factorielle N N M factorielle N 1 M N gt 1 Questions la 4 me question peut ne pas marcher avec les nombres flottants selon l impl mentation des r els utilis e sur votre machine factorielle 10 X factorielle 40 X factorielle 100 X factorielle 100 0 X factorielle 1000 X ProloglA 537 WA Annexes r 3 Calculs bancaires bank p3e Le programme Calcul bancaire Le taux d inter t est de 10 versementsCapital lt gt 0 versementsCapital lt I gt X C versementsCapital X C 10 100 C I Quelques questions pos es avec des nombres entiers ou flottants versementsCapital lt I 2I 3I gt 1000 versementsCapital lt I I I gt 10000 A versementsCapital lt I 2I 3I gt 1000 0 versementsCapital lt I I I gt 10000 0 538 ProloglA Bolig Annexes
310. gt hors d oeuvre X plat Y dessert Z somme lt X gt L S gt somme L S0 S 5S0 X poules lapins P L P L 2P 4L gt Pour activer un programme on doit composer une requ te Une requ te est la m me chose qu une queue de r gle Voici des exemples de requ tes cor rectes 60 ProloglA Bolig Concepts de base hors d_oeuvre X plat Y dessert Z repas H sole D H salade poules lapins P L 16 44 circuit A B C C A amp B 0 D gt C D B Signification d un programme Prolog Ill Examinons maintenant la signification d un programme Prolog III Elle est double d une part il constitue la d finition r cursive d un ensemble d arbres qui sont consid r s comme des faits vrais par le programmeur c est ce qu on appelle la s mantique d clarative du langage D autre part un programme se traduit pour l interpr te de Prolog III en une suite d actions ex cuter de deux sortes des r solutions de syst mes de contraintes et des appels de proc dures Nous appellerons cela la s mantique op rationnelle de Prolog II L ensemble des faits d finis par un programme Prolog Ill Un programme est fait de r gles de la forme to gt t1 t2 tn S 1 o t est un terme t1 tn sont des termes et S est un ensemble de contraintes Nous savons que chaque affectation A de l ensemble des variables de cette r gle transforme les termes t en des arbres aj t A et l ensemb
311. h radis p thon d fruit Poisson 5 2 EXIT rC break dans Poisson sol p C h pate p sole 5 2 EXIT rC break dans Poisson sol p C pate p sole d fruit L utilisateur se r f rera au manuel Mise au point de programmes Prolog II pour la d finition des points espion Voir galement spy e debug no_debug 220 ii ProloglA Bulag Bolig R gles pr d finies et proc dures externes char C Fonction V rifie que C repr sente un caract re connu Classe R gle pr d finie Prolog III Cat gorie V rification de types Param tres connus aC Messages d erreur Non D finition Le but char C s efface si C est un terme repr sentant un caract re connu Exemples char a char A A char char A PrologIA 221 Ed L ka Ed ol R gles pr d finies et proc dures externes ee char code C N Fonction Liaison d un caract re et de son code ASCII Classe R gle pr d finie Prolog MI Cat gorie Conversion Param tres connus CouN Messages d erreur Non D finition Fait correspondre au caract re C son code ASCII N et vice versa Exemple gt char code A N N 65 gt char code C 65 feas Remarque Les caract res dont le code ASCII est compris entre 0 et 31 sont imprim s sous la forme uu o uu repr sente l criture octale du code en question 22
312. h Prelog Fonctions de conversion adr Convert_StringC_to_StringP buf char buf long Convert_StringP_to_StringC t buf size_buf adr t char buf long int size_buf adr Convert_LongIntC_to_IntP n long int n int Convert_IntP_to_LongIntC t i adr t long int i adr Convert_DoubleC_to_NumP f double f int Convert_NumP_to_DoubleC t f adr t double f adr Convert_ExtendedC_to_NumP f double f int Convert_NumP_to_ExtendedC t f adr t double f Convert_StringC_to_StringP buf Transforme la cha ne C termin e par z ro point e par buf en une cha ne Prolog III et retourne l adresse du terme ainsi construit ou NULL si la transformation n a pas pu tre faite 1016 ProloglA Pelog Utilisation de Prolog IH sur Macintosh Convert_StringP_to_StringC t buf size_buf Transformation r ciproque de la pr c dente doit tre l adresse d un terme Prolog II de type cha ne de caract res buf est l adresse d un espace ayant pour taille au moins size_buf caract res Cette fonction transforme la cha ne Prolog point e par t en une cha ne C termin e par z ro rang e partir de l adresse buf Si la taille de la cha ne Prolog d passe la valeur size_buf alors la cha ne est tronqu e Convert_LongIntC_to_IntP n Transforme l entier long n en un nombre Prolog III et retourne l adresse du terme ainsi construit ou NULL si la transformation n a pas pu tre faite Convert_IntP_to_LongIntC t
313. hiques button 501 button2 501 buttonD 502 cb 500 ccol 504 clipRect 476 col 504 crow 504 editf 501 erase 475 476 477 eraseOval 475 ceraseRect 475 eraseRoundRect 475 frame 475 476 frameOval 475 frameRect 475 frameRoundRect 475 glist 502 group 505 hfill 505 invert 475 476 477 sinvertOval 475 sinvertRect 475 invertRoundRect 475 paint 475 476 477 paintOval 475 paintRect 475 paintRoundRect 475 rb 500 rb1 501 row 504 text 500 cuserltem 503 vfill 504 parasite 164 particular_value 105 315 partie ferm e d une famille 179 pgcd 316 pile de backtracking taille 1009 pile pour la r cup ration de m moire taille 1009 pixels 466 471 474 482 504 511 plus unaire 98 police de caract res 469 ppcm 317 pr cision parfaite 26 94 predefined 190 318 pr fixe 24 syntaxe 177 434 444 primitive de groupement 505 primitives bool ens 128 conversions de cha nes 86 num rique 104 tuples 80 primitives d agencement 504 primitives de description 500 print_window 472 priorit s des op rateurs bool ens 119 des op rateurs num riques 98 Pro3Final 1025 1027 Pro3Goal 1025 1026 Pro lnitial 1025 projection sur un sous vocabulaire 127 prolog3 bst 1003 prolog3 era 1003 prolog3 erf 1004 prolog3 err 1004 prolog3 lex 1003 prolog3 prf 1004 prolog3 sya 1003 prolog3 syf 1003 prolog3 syn 1003 prologlil 319 protocole de transfert de donn es 1014 1018 put 397 PrologilA 1039
314. hisser Mirail 541 Exemples de questions ss 542 7 D tection de panne dans un additionneur circuit p3e 543 Ee programme inner der er ere eee M i 543 Premier jeu de questions menisini ai a 543 Second jeu de questions Ais i a e r E E 544 8 Un puzzle num rique Send poesie unit 545 Le programme rE E A 545 La questions sise a a Re er aeaa 545 9 Un probl me de remplissage rectangle p3e 546 Ee programme tnanon dans Pete nee ee sites EE A en sor dans stereo en 546 Une questions nc nt msn dite aaa a 546 Index du manuel de r f rencement 547 Manuel d utilisation Utilisation d Prolog TI ion nn nounou 1001 LE Installatiori de Prolog TMS sas ones Sun h aaile 1002 Mat riel et logiciel requis 1002 Contenu du kit d installation 00000000000001ststititieterertrerereerereeseeee 1002 Fichiers indispensables pour utiliser Prolog M 1003 Fichiers Annexes ss nn AP NEE E set 1004 Proc dure d installation s seesseseseseresesererrereererreerssssessssssses 1005 Sur disque dur iea Ea eean 1005 Dur Disquettes sas i E Pen entree 1005 2 Uuhs uonde Prolog Ml aient 1005 Activation de Prolog IL 1005 Param trisation de l interpr te Prolog II 1006 Interruption d un programme 1007 3 Sp cificit s de Prolog IM Macintosh 1008 Valeurs extr mes des constantes arithm tiques
315. iables de bool ens et des op rateurs de priorit s d croissantes non et ou quivalent et implique not s respectivement amp lt gt gt Le parenth sage permet de modifier les priorit s Voici des exemples d expressions bool ennes correctes 436 ProloglA Pely Bolig Syntaxes x y Y X amp X c amp l u3 amp x1l lt gt x3 o Arbres et Termes Sur le plan strictement syntaxique un terme est un couple constitu d une tiquette et d une liste ventuellement vide de fils Un arbre est un terme sans variables Une feuille est un terme sans fils que l on confond avec son tiquette Quelques exemples de termes corrects f x y a b c 4z y caractere c caractere c lt 1 2 A B gt 2Z El lt a b c gt R le constructeur g n ral d arbre 1 2 3 L une liste classique On notera que l on a parenth s l tiquette des deux premiers termes Dans le dernier exemple la barre est le s parateur de paire point e et non pas l op ration ou bool en Si on souhaite exprimer la liste contenant l expression bool enne A B il faut crire A B au lieu de A B1 On insistera fortement sur le fait que syntaxiquement correct ne signifie pas s mantiquement correct Des exemples de termes syntaxiquement incorrects toto x y z t toto Contraintes Les contraintes sont toujours exprim es l int rieur d un ensemble entre accolad
316. ication 127 contrainte de taille 76 num riques 101 exemples 101 forme normale 102 retard es 156 retard es 151 syntaxe 439 contraintes de type lbool 53 120 lboolt 53 120 Ichar 53 Ichart 53 lid 53 lidt 53 Inum 53 100 Inumt 53 100 ltuple 53 contraintes num riques 14 control 497 contr le 162 Convert_DoubleC_to_NumP 1014 1017 Convert_ExtendedC_to_NumP 1014 1017 Convert_IntP_to_LongIntC 1014 1017 Convert_LongintC_to_IntP 1014 1017 Convert _NumP_to_ DoubleC 1014 1018 Convert_NumP_to_ExtendedC 1014 1018 Convert_StringC_to_StringP 1014 1016 Convert_StringP_to_StringC 1014 1017 coordonn es horizontales 473 coordonn es verticales 473 cos 172 370 coupure 164 cpu_time 198 228 crayon 474 481 482 create_button 515 create window 471 ProloglA Poleg Index G n ral current_context 182 229 current_predicate 187 230 cut 231 cut coupure 164 D def_array 174 232 default 167 234 d finition de contexte set_context 180 deactivate_button 515 dialogue de saisie de nom de fichier 516 dialogue de s lection d un fichier 516 dictionary 184 235 dictionnaire externe taille 1009 dictionnaire interne taille 1009 dif 237 DISTANCE 468 div 106 171 238 368 division 31 98 dot 239 E echo 197 240 341 edinburgh 241 edinburg mo 1004 EDIT 467 edit 497 edit 242 diteur de textes h te 1009 galit 50 enable menu 496 end_module 185 243 ensemble de cont
317. ie Environnement Param tres connus Aucun Messages d erreur Non Description cpu_time unifie N avec le temps cpu en millisecondes Voir galement e reset_cpu_time 228 ProloglA Bolig R gles pr d finies et proc dures externes current_context T0 current_context T0 T1 T2 T3 Fonction Identification de contexte Classe Proc dure externe Prolog M II Cat gorie Gestion des r gles et des identificateurs Param tres connus Aucun Messages d erreur Non Description Unifie T0 avec le terme identifiant le contexte courant de lecture criture et T1 T2 T3 avec respectivement le terme d finissant la suite explicite le terme d finissant la suite implicite et le pr fixe par d faut de ce contexte Voir la section Structuration saisie et modification des r gles du chapitre Le contr le et l environnement des programmes pour plus de d tails Voir galement e set _ context PrologIA 229 Ed L a La 2 ol R gles pr d finies et proc dures externes ee current _predicate lt I A gt Fonction Test de pr sence d une r gle Classe Proc dure externe Prolog M I Cat gorie Gestion des r gles et des identificateurs Param tres connus Aucun Messages d erreur Non Description Permet de tester la pr sence d une r gle S efface s il existe une r gle d identificateur d acc s I et d arit Si est une variable et I es
318. ier de nom d termin par la cha ne de caract res S de la trace d ex cution d un programme Si la chaine de caract re est la chaine vide la trace est redirig e sur l unit de trace d finie au d marrage de Prolog MI Le fichier en question ne sera ferm qu au prochain trace_file on pourra par exemple utiliser trace_file Voir galement e trace no_trace ProloglA 363 Ed L ka Ed ol R gles pr d finies et proc dures externes ss trunc R N Fonction Partie enti re Classe Proc dure externe Prolog II Cat gorie Contraintes num riques Param tres connus R Messages d erreur Aucun Description Pose la contrainte N R o R est la partie enti re du nombre R Exemples gt trunc 5 4 N N 1 gt trunc 3 56 N 364 ProloglA Bolig R gles pr d finies et proc dures externes tuple U Fonction V rifie que U est un tuple connu Classe Proc dure externe Prolog II Cat gorie V rifications de types Param tres connus Uu Messages d erreur Aucun Description S ex cute avec succ s si U repr sente un tuple connu c est dire dont on sait si le nombre de fils est nul ou pas Echoue dans tous les autres cas Exemples tuple lt gt tuple lt 1 0 ceslawi gt tuple connu tuple lt gt X tuple lt A B C gt tuple U U tuple ProloglA 365
319. ig Outils de mise au point L ensemble des noms de ports sur lequel le point d arr t s arr tera est la valeur de l option breakport au moment de l installation du point d arr t Un point d arr t install par breakat apparait sous la forme du caract re dans l affichage produit par la commande ls ou locus Les points d arr t sont rendus inactifs en mettant l option break 0 Si l option break est 1 une commande de type cont ou C s arr tera sur ce point d arr t pour les ports convenus lors de l installation gt aa x gt bb x cc x gt bb x gt eq x 1 gt ccec 1 gt gt aa X x 1 1 CALL aa X DBG s 1 1 RULE r1 aa X aa x 1 DBG 1 1 ok r1 aa X DBG 1s 2 aa X gt ebb X cc X 1 aa X 0 query e DBG breakat 2 3 DBG ls 2 aa X gt ebb X cc X Un point d arr t sur cci x 1 aa X 0 query e DBG C On va jusqu au prochain point d arr t xx 4 2 CALL cc 1 DBG Point d arr t atteint unbreak tous ports SYNTAXE unbreak unbreak n boite unbreak niveau n litt ral DESCRIPTION 1 Les options sont positionn e par la commande set 2 Si on y arrive un backtracking pouvant tr s bien se produire entre temps PrologiA 2017 Outils de mise au point Cette commande de syntaxe similaire breakat permet d enlever des point d arr ts de la d monstration courante Contrairement brea
320. il FAIL RULE ProloglA 2031 Outils de mise au point Les points de choix sont des jalons naturels de toute d monstration non d terministe et sont les candidats tout d sign s la reprise d ex cution La manipulation consiste pour refaire une portion de branche e rep rer le point de choix le plus proche possible du point erron en tant toutefois en amont dans le pass l aide de la commande chpt e effectuer une suite de fail ou FAIL en retournant dans les boites pertinentes et se retrouver au port RULE correspondant la boite du point de choix e s lectionner la r gle utiliser avec la commande RULE afin de reprendre l ex cution La poursuite de l ex cution va refaire cette branche Un exemple il s agit de menu p3 sera plus explicite gt RepasLeger h p d 1 1 CALL RepasLeger h p d DBG 1 1 RULE r1 RepasLeger h p d RepasLeger h 1 p 1 4 1 DBG 1 1 ok r1 RepasLeger h p d DBG 2 2 CALL HorsDoeuvre h i_1 DBG n 2 2 EXIT r1 HorsDoeuvre radis 1 DBG 3 2 CALL Plat p j_1 DBG n 3 2 EXIT r1 Plat boeuf 5 DBG Supposons qu ce moment nous souhaitions d tailler l ex cution de la r gle Plat partir du port CALL On va chercher parmi les points de choix celui qui est avant la boite n 3 laquelle correspond Plat 1 Ce qui veut dire que les programmes d terministes ne permettent pas d
321. ilisation de Prolog III sur Macintosh prolog3 err Messages d erreur de l interpr te Il s agit en fait d une copie de l un des fichiers prolog3 era ou prolog3 erf initial3 psv Etat sauv initial contient notamment les d clarations sous une forme cod e des r gles pr d finies prolog3 prf Fichier de pr f rences contient une configuration sous la forme d une ligne de commande qui peut tre modifi e voir le paragraphe suivant edinburg mo Module contenant les d clarations sous une forme cod e des r gles pr d finies utilisables en syntaxe Edimbourg On peut s en passer si on ne souhaite pas utiliser ces r gles l Fichiers annexes exemples Ce dossier contient un certain nombre de programmes sources Prolog II Le r le des fichiers du disque 3 et du dossier sources et objets est expliqu dans la section Ajout de r gles pr d finies de ce chapitre Proc dure d installation Sur disque dur Copiez les fichiers et dossiers des volumes de distribution dans votre disque de travail puis rangez les volumes de distribution en un lieu s r Pour utiliser Prolog en consommant le moins d espace disque vous pouvez ne recopier que les fichiers qualifi s d indispensables dans la liste pr c dente Il vaut mieux copier dans un m me dossier les fichiers Prolog II initial3 psv prolog3 bst prolog3 err prolog3 syn et prolog3 prf 1004 ProloglA Bolig e Utilisation de Prolog III sur M
322. incorrectes nun 1 Les crochets et 2 11 1112 3 L exemple 1 pose le probl me bien connu de la pr sence dans une cha ne du d limiteur des cha nes lui m me L exemple 2 montre une mauvaise mani re de r soudre ce probl me L exemple 3 comparer avec l exemple 8 des cha nes correctes montre un cas o l on ne peut se dispenser d crire les trois chiffres du code ASCII en octal du caract re L criture correcte de cette cha ne serait probablement 11 01112 OU 11 t12 ProloglA 41 Concepts de base Prelog Expressions num riques Appelons expression num rique un terme constitu par l application d un op rateur arithm tique un ou plusieurs op randes En voici des exemples X 1 X 2 355 113 3 4 1 2 0 333 4 X 3Y 52 4 14 9 17 T 5 1000 2 3 4 5 Y 6 1 2 2 3 3 4 4 5 X Y 2T 5 7 X Y X Y 8 2T 5 X Y X Y 1 2 9 L expression 1 resp 2 indique l op ration de changement de signe resp l op ration neutre appliqu e au nombre inconnu x L une et l autre n ont de sens que pour des nombres elles imposent donc x de repr senter une valeur num rique En outre leur r sultat est par d finition un nombre Comme les autres op rations arithm tiques elles ont donc bien plus de cons quences que la simple transformation de la valeur de leur op rande ils imposent des contraintes de type leurs op randes
323. inies par la suite_implicite L exploitation ult rieure de toute cette information respecte l ordre d entr e en sc ne de ces l ments les recherches se font d abord dans la liste d duite de suite_explicite cette liste tant parcourue du d but vers la fin puis dans la liste d duite du premier l ment de suite_implicite puis dans celle d duite de son second l ment et ainsi de suite e pr fixe_par_d faut est le pr fixe qui sera attribu chaque identificateur abr g condition que ce dernier ne soit pas la forme abr g e de l un des identificateurs apparaissant dans la liste L Note 1 L ex cution de la commande set_context nom suite_explicite suite_implicite pr fixe_par_d faut produit la m morisation du contexte d crit par cette commande sous la forme d un fait ajout au module d environ nement sys env context nom suite_explicite suite_implicite 180 ProloglA Bulag Bolig L environnement pr fixe_par_d faut gt Note 2 Si vous d finissez des contextes ne contenant pas la famille sys dans suite_implicite vous devrez faire attention au fait qu un grand nombre d identificateurs abr g s perdent leur signification habituelle des r gles pr d finies deviennent inconnues sous leur nom abr g et pi ge bien plus redoutable des identificateurs abr g s tr s communs comme l quivalent du nil de Prolog Il n ont plus la forme compl te qui est utilis e dans l
324. initiale est lt gt Cette premi re d finition permet de consid rer les tuples comme des suites finies d arbres On notera au passage que l aspect fini se rapporte au nombre d l ments et non pas la profondeur de ceux ci et que le caract re de suite induit un ordre sur ces l ments les tuples ne sont pas des ensembles On appellera souvent faille le nombre de fils d un tuple Op rations La seule op ration d finie sur les tuples est l op ration de concat nation not e par un point Cette op ration construit partir de deux tuples T1 et T2 respectivement de tailles n etm le tuple T1 T2 de taille m n dont les n premiers fils sont ceux de T1 et les m suivants ceux de T2 76 ProloglA Bulag Bulag Arbres tuples cha nes et listes Ceci peut s illustrer par le sch ma suivant lt gt INA A X Xa Y Yy Concat nation de deux tuples Relations Les relations qui permettent de construire des contraintes sur les tuples sont les m mes que celles utilis es pour les arbres savoir l galit l in galit et la relation unaire permettant d associer un tuple le nombre de ses l ments Dans ce dernier cas on dispose de la relation de taille sur les arbres mais galement d une relation unaire qui impose un terme T de repr senter un tuple T tuple Restrictions concernant les tuples Pour r aliser un bon compromis entre la complexit des contraint
325. ion ne peut pas tre faite La fonction retourne 0 FALSE en cas d erreur une valeur non nulle TRUE autrement Second protocole de transfert de donn es Le deuxi me syst me offre pour chacun des types de donn es permis entiers r els cha nes une fonction associ e pour transf rer cette donn e depuis Prolog vers le programme externe et une autre pour la transf rer depuis le programme externe vers Prolog Pour chaque argument de la r gle externe c est dire du but effacer la fonction ad quate doit tre appel e avec comme param tre le rang de cet argument Transfert de donn es simples de Prolog vers C Ces fonctions sont appel es par le programme externe pour obtenir les valeurs effectives des arguments de la r gle externe Une fonction sp cifique est associ e chaque type de donn e Si le type de l argument effectif n est pas celui attendu la fonction de communication renvoie une erreur et force le programme backtracker Attention il est alors imp ratif de sortir imm diatement de la fonction externe Voici les fonctions disponibles pour les types simples get_integer no_arg value err int no_arg long value int err 1018 ProloglA Bolig Bolig Utilisation de Prolog IH sur Macintosh get_real no_arg value err int no_arg float value int err get_string no_arg value err int no_arg char value int err no_arg est un entier donnant le rang de l argument
326. iorit sur les op rateurs num riques e Les op rateurs et sont prioritaires sur les op rateurs et Tout d abord on notera que les op rateurs plus et moins una ires ont le m me ordre de priorit que les op rateurs plus et moins binaires Ensuite en cas d galit des ordres de priorit s l op rateur de gauche est prioritaire par rapport celui de droite Exemple x y z x y z s crit plus simplement x y z x y 2 Voici pr sent un certain nombre d expressions num riques correctes pour la syntaxe exacte des expressions num riques on se reportera au chapitre Syntaxes 1 1993 1989 2 X 3 3 2 X 4 2x 5Y 5 3 2 X 7 02 98 ProloglA Bolig Les contraintes num riques 6 X 2Y Z et quelques unes incorrectes 7 21 x 8 x2 9 3 x 10 3 2x 11 X 2Y 1 Voici quelques remarques concernant ces exemples 2 est une expression num rique qui impose simplement x de repr senter une valeur num rique On remarquera en passant que le terme x n est pas une expression num rique la variable x repr sentant un arbre quelconque 3 L expression est parenth s e et n admet pas l omission des parenth ses voir l exemple 10 et le chapitre sur la syntaxe des expressions num riques particuli rement en ce qui concerne l omission possible de l op rateur de multiplication On se rappelera ce sujet que cet op rateur peut tre omis uniquement dans les expr
327. ique form partir du symbole qui exprime une relation et un terme ou un couple de termes sur lesquels on dira encore que la relation porte Nous allons donc nous transporter sur un plan syntaxique introduire les variables Syntaxe Dans les programmes Prolog III les contraintes sont toujours exprim es au sein de syst mes de contraintes Un syst me de contraintes est une suite finie de contraintes s par es par des virgules encadr e par des accolades lt syst me de contraintes gt 4 lt contrainte gt lt contrainte gt 1 En expliquant les conditions sur des arbres nous n avons pas pu faire autrement que de d finir en m me temps les symboles qui expriment les relations nous avons donc d j donn l essentiel de la syntaxe des contraintes Bien entendu une contrainte sur des termes sans variable n est rien d autre que l expression crite d une condition sur des arbres 54 ProloglA Bolig Concepts de base lt contrainte gt x lt terme gt lt terme gt lt terme gt lt terme gt lt terme gt gt lt terme gt lt contrainte de typage gt lt contrainte Sup gt lt contrainte Inf gt lt contrainte Sup gt lt terme gt lt sup gt lt terme gt lt contrainte Sup gt lt sup gt lt terme gt lt contrainte Inf gt lt terme gt lt inf gt lt terme gt lt contrainte Inf gt lt inf gt lt terme gt lt inf gt lt lt
328. ique le nombre maximal de caract res imprimer au sein d une cha ne de caract res et non d un tuple Cette option se comporte comme maxexpr et imprime le reste de cha ne sous la forme nc ou n est le nombre de caract res restant Par exemple si maxstr vaut 10 le terme eg x cette chaine est un peu trop longue sera imprim eq x cette chai 25c Une valeur de 1 indique une impression int grale de la cha ne print valeurs 0 1 valeur par d faut 1 Cette option pilote l impression des ports pendant le d roulement d un programme et affecte donc le comportement des commandes de progression comme step next et cont En effet tout point d impression tant un point d arr t pour step si cette option est mise 0 step n est plus en ProloglA 2023 Outils de mise au point mesure de s arr ter l Pendant l ex cution de next aucun des ports correspondant des boites int rieures n est imprim printport valeurs cerfRYNI valeur par d faut cerfRYN Cette option sert limiter les impressions de ports ayant lieu pendant le d roulement du programme que se soit par step next ou cont Cette option prend pour valeur un ensemble de ports chacun d crit par une lettre toutes les lettres coll es Il est possible de rajouter ou de retrancher des ports cette option en utilisant les signe ou Quelques exemples set printport cerf set printport YN set printport RYN Cette op
329. ir de Prolog II en sauvant la totalit des modules y compris ceux qui constituent le superviseur Prolog II tat initial sous forme cod e Le fichier produit a pour nom prolog3 psv Voir galement e exit S quit quit N e reload PrologIA 247 2 gens 2 Bol R gles pr d finies et proc dures externes L exit S Fonction Sortie de Prolog II Classe Proc dure externe Prolog M I Cat gorie Environnement Param tres connus S qui doit tre une cha ne de caract res Messages d erreur Cha ne attendue Description Permet de sortir de Prolog III en sauvant la totalit des modules y compris ceux qui constituent le superviseur Prolog II tat initial sous forme cod e dans le fichier de nom S Voir galement e exit quit quit N e reload 248 ProloglA Bolig R gles pr d finies et proc dures externes fail Fonction Echec Prolog Classe R gle pr d finie Prolog MI Cat gorie Contr le Param tres connus Aucun Messages d erreur Non Description fail provoque toujours un chec Prolog et donc l exploration des autres choix en attente backtracking On pr conise l emploi de fail plut t que l utilisation d un pr dicat non d fini afin d viter d avoir des messages d erreurs ou d avertissement l ex cution voir ce sujet les primitives trace et set_confis ProloglA 249 2 gens 2 Bol R gles pr d finies et proc dures ext
330. ire effectivement En fait tous les caract res dont le code ASCII est inf rieur ou gal 32 sont ignor s Voir galement e in_char in_char in_ident in_integer inl in_real in_sentence in_string in_term next_char 302 ProloglA Bulag A gt 2 L2 bd L a R gles pr d finies et proc dures externes no_debug Fonction Annule le mode debug Classe Proc dure externe Prolog M II Cat gorie Environnement Param tres connus Aucun Messages d erreur Non Description Annule l effet des primitives debug ou de tout passage en mode debug provoqu par l utilisation de la primitive set_config Voir galement e debug trace no_trace e set_config set_configuration get_config get_configuration PrologIA 303 2 gens 2 Boli R gles pr d finies et proc dures externes L no _ echo Fonction Annule l cho sur la console Classe Proc dure externe Prolog M I Cat gorie Entr es sorties Param tres connus Aucun Messages d erreur Non Description Annule l effet de la primitive echo Voir galement e echo e set_config set_configuration get_config get_configuration 303 i ProloglA A gt 2 L2 bd L a R gles pr d finies et proc dures externes no_spy lt I N gt no_spy S Fonction Annule l espionnage de paquets de r gles Classe Proc dure externe Prolog M II Cat gorie Environnement Param tres conn
331. is travers leur syntaxe habituelle dite d Edimboursg Dans les programmes Prolog III les arbres sont repr sent s par des formules appel es fermes La syntaxe des termes appara tra progres sivement tout au long des paragraphes suivants elle est r sum e au chapitre Les syntaxes de Prolog III 22 PrologilA Bolig Bolig Concepts de base Les arbres et les termes ne sont pas la m me chose les l ments du domaine de Prolog III sont des arbres les entit s syntaxiques qui les repr sentent sont des termes Or dans l explication de Prolog III il ne sera gu re question que de ces derniers car ils sont la seule expression crite des arbres en accord avec la syntaxe du langage Ceci semble encourager une certaine confusion des deux notions Nous ne saurions trop mettre en garde le lecteur contre une telle confusion car elle pr sente de nombreux inconv nients et notamment celui d emp cher la compr hension de notions parmi les plus importantes Cela tant dit il y a un cas dans lequel on confond un arbre et le terme qui le repr sente il s agit des constantes qui sont par d finition les arbres repr sent s par des termes simples dont l expression ne fait pas intervenir d op rateur ainsi que l explique le paragraphe suivant 2 Constantes Parmi les l ments du domaine de Prolog III c est dire les arbres les constantes d signent ceux qui ont re u une d nomination particuli re Comme
332. issent respectivement les nombres 106 0 5 x 106 31 4 x 10 1 4 0 666 Flottants incorrects e10 1 e10 2 1 2e 3 3e10 4 L exemple 1 ne sp cifie pas un nombre mais une variable Les autres exemples nous rappellent que la mantisse doit avoir au moins un chiffre 2 l exposant ne peut tre omis 3 pas plus que le point d cimal 4 Caract res A 1 x41 2 101 3 415 4 ART 5 Les trois premiers exemples sp cifient le m me caract re la lettre a dont le code ASCII est 41 en hexad cimal ou 101 en octal On notera que si le z ro a t omis dans le quatri me exemple qui sp cifie le caract re 041 en octal c est parce qu il n y a aucune ambigu t au sujet du caract re imm diatement apr s l expression 41 L exemple 5 indique le caract re de fin de ligne 40 ProloglA Bolig Concepts de base Cha nes de caract res Pinocchio va a l ecole 1 Pinocchio va a l ecole 2 Cette chaine contient nun retour chariot 3 Les crochets et indiquent 4 u 5 A tB 6 A x09B 7 A x7B 8 Les cha nes 1 et 2 sont identiques La cha ne 4 a pour contenu Les crochets et indiquent La cha ne 5 est la cha ne vide Elle peut aussi s crire lt gt Les cha nes 6 et 7 sont identiques A et B s par s par une tabulation horizontale L exemple 8 repr sente la chaine A Cha nes de caract res
333. it dans cet exemple que de termes sans variable tre quivalent signifie tout simplement repr senter le m me arbre PrologIA 45 Concepts de base L exemple 3 montre que dans le cas d une feuille la syntaxe interdit l criture d une paire de parenth ses encadrant la suite vide des fils Ceci est tout fait coh rent avec la propri t que Prolog III ne distingue pas une feuille de son tiquette Que repr sentent les termes Les termes repr sentent les arbres dans les programmes Prolog III On peut comprendre cela de deux mani res e Un terme d signe un arbre partiellement inconnu Nous avons d j expliqu qu une variable terme particulier repr sentait un arbre inconnu dont la d termination tait l objet du programme Prolog II consid r De mani re analogue un terme repr sente dans le cas g n ral un arbre dont certains constituants seulement sont connus l objet du programme tant de d voiler les autres constituants Les parties inconnues sont n cessairement des sous arbres les parties connues peuvent tre des sous arbres ou bien des l ments qui d finissent le squelette de l arbre Par exemple le terme lt P L 2P 4L gt repr sente un tuple dont le squelette est connu c est un tuple de longueur deux alors que les sous arbres qui le constituent sont les nombres inconnus r sultats des op rations P L et 2P 4L e Un terme repr sente un ensemble d arbres sa
334. itrines gt lt F etre apte a etre depute gt lt G etre un bienfaiteur du peuple gt lt H etre digne d eloges gt lt I etre populaire gt lt J etre sans pretention gt lt K etre une femme gt lt L laisser un souvenir imperissable gt lt M posseder une influence gt lt N savoir garder un secret gt lt O s exprimer bien gt lt P valoir son pesant d or gt gt F amp C gt G A amp O gt B K amp H gt N G amp D gt F P amp H gt y G amp D gt H I amp P gt N C amp F gt H N amp J gt G amp L K amp G gt I P amp C amp L gt E K amp A amp B gt F ProloglA 541 Annexes N amp C gt I A amp M amp D gt G G amp J gt E N amp D gt P O amp M gt K I amp H gt G J Exemples de questions permettant de d couvrir des liens s il en existe entre des propri t s possibilite lt lt A avoir l esprit clair gt lt I etre populaire gt lt N savoir garder un secret gt gt possibilite lt lt N savoir garder un secret gt lt F etre apte a etre depute gt lt P valoir son pesant d or gt gt possibilite lt lt K etre une femme gt lt F etre apte a etre depute gt gt K bool F bool 542 PrologiA Bulag Bola A Annexes
335. ize R R 2X Y X gt 2 Y gt 3 gt Remarque On pourra utiliser la primitive block pour la r cup ration des erreurs Voir galement e maximize maximum minimum lower_bound upper_bound 296 ProloglA Bolig R gles pr d finies et proc dures externes mod N1 N2 N3 Fonction Reste de la division enti re Classe Proc dure externe Prolog II Cat gorie Contraintes num riques Param tres connus N1 et N2 entier N2 non nul Messages d erreur Division par z ro Description Pose la contrainte N3 R o R est le reste de la division enti re de la valeur absolue de N1 par la valeur absolue de N2 On prendra garde ne pas confondre le pr dicat avec la fonction valuable du m me nom voir la r gle pr d finie val Exemples gt mod 9 2 R gt mod 7 N1 N2 gt Voir galement e div e frunc PrologIA 297 Ed L a La Ed ANA R gles pr d finies et proc dures externes n module P1 S1 S2 P2 Fonction D claration de d but de module Classe Proc dure externe Prolog M II Cat gorie Gestion des r gles et des identificateurs Param tres connus Voir ci apr s Messages d erreur Non Description D finit toutes les r gles comprises entre les appels des primitives module et end_module comme d crivant un m me module On se reportera pour ces notions assez complexes au chapitre Environnement On rappelle cependan
336. kat tous les ports sont concern s sans tenir compte de la valeur de l option breakport 7 Modifier le d roulement de l ex cution Quelques commandes permettent de modifier le d roulement d un programme ce sont changechpt fail FAIL RULE RULE et changechpt permettent de modifier des points de choix FAIL et fail provoquent des backtracking changechpt tous ports SYNTAXE changechpt n boite n r gle DESCRIPTION Change le num ro de r gle suivante du point de choix de la boite de num ro n boite la r gle de num ro n r gle Cette commande permet de modifier un point de choix et modifie donc l arbre de recherche qui est parcouru par l interpr teur Appelons ici arbre de recherche l arbre des d monstration dont les n uds sont des OU dont les fils correspondent aux alternatives au sein d un paquet de r gles Cette commande ne modifie pas le parcours de la branche courante puisqu elle modifie une alternative situ e dans le pass de cette branche changechpt permet d laguer certaines branches quand on sait qu elles sont st riles ou qu on souhaite progresser plus vite dans la recherche d une erreur Il est galement possible d en r ex cuter certaines qui ont d j t parcourues Cette commande utilise les informations affich es par la commande chpt Voici deux exemples o on modifie des choix en attente Dans le celui ci on saute une solution 2018 ProloglA Bolig
337. l ment la version rencontr e dans le fichier remplace celle qui se trouve en m moire sans produire d erreur l est une liste de la forme lt prefi subs1 gt lt prefk subsx gt qui sp cifie le renommage des modules charg s pref1 sera substitu par subs1 pref2 par subs etc Cette liste peut tre vide 190 ProloglA Bulag Bolig L environnement save l f Sauvegarde de modules f est un nom de fichier cha ne de caract res et une liste de pr fixes cha nes de caract res Cette commande produit la sauvegarde dans le fichier indiqu de tous les l ments r gles variables statiques et tableaux des modules correspondant aux pr fixes donn s Exemple gt save data dict myfile mo Le fichier produit est un fichier de code objet destin tre ult rieurement charg dans un autre environnement Prolog au moyen de la commande reload voir ci dessus 4 Entr es sorties Tous les organes d entr e sortie clavier cran fichiers etc utilis s par un programme Prolog III y sont repr sent s par des entit s appel es unit s d entr elsortie La repr sentation crite d une telle unit est une cha ne de caract res le cas ch ant cette cha ne repr sente aussi une information identifiant l unit vis vis du syst me d exploitation nom de fichier etc A tout moment le syst me Prolog II conna t un certain nombre
338. l mentaires Un certain nombre de commandes sont pr d finies de cette fa on PrologIA 2007 Outils de mise au point e Les commandes sont ex cut es chaque point d arr t S il n y a aucune commande en attente d ex cution le prompt est affich et l utilisateur a la main 2 Points d impression et points d arr t Par d faut tout passage une porte provoque l impression de son statut En mode pas pas step ce point d impression est aussi un point d arr t Des commandes y seront lu et ex cut es Il y a deux sortes de points d arr t selon que l on souhaite d bugger un appel particulier ou tous les appels un paquet de r gles Pour d bugger la r gle appelante il faut utiliser la commande breakat alors que pour d bugger tous les appels un paquet on utilise la commande spy La diff rence entre ces commandes est que breakat met un point d arr t sur une boite de la d monstration courante alors que spy met un point d arr t sur l ensemble des boites potentielles qui existeront peut tre plus tard dans la d monstration 3 Classifications des commandes On peut classer les diff rentes commandes du d buggeur en plusieurs cat gories e Les commandes de progression du d monstrateur Prolog III utilis es pour faire des sauts plus ou moins grands step next nextp nexic cont C e Les commandes utilis es pour imprimer des informations chpt locus Is resol rs printbox e Les
339. l on ne connait pas l tiquette de l arbre repr sent par x et si l on ne sait pas si le nombre de fils de x est nul ou pas 2 Expressions variables statiques tableaux Expressions arithm tiques En Prolog II les op rations arithm tiques sont int gr es dans le c ur m me du langage Cependant nous avons conserv le m canisme val de Prolog IT par souci de compatibilit parce que ce m canisme reste dans certaines circonstances un proc d fort efficace pour valuer des expressions arithm tiques et surtout parce qu il demeure le moyen d utiliser les variables statiques et les tableaux Le r sultat d une valuation faite au moyen de la r gle pr d finie val est soit un entier soit un r el soit un identificateur soit une cha ne Les valeurs bool ens dans ce cas seront repr sent es par les entiers 0 et 1 Sur la plupart des machines les valeurs des entiers sont comprises entre 2 147 483 648 et 2 147 483 647 231 1 celles des flottants entre 1 7e38 et 1 7e38 et la plus grande valeur n gative et la plus petite valeur positive sont respectivement 0 29e 38 et 0 29e 38 Les valeurs situ es strictement entre ces deux valeurs sont mises 0 val t t2 Evalue l expression t1 et produit le r sultat t2 L expression valuer est construite r cursivement partir de constantes de variables statiques identificateurs assign s d identificateurs de composantes de tableaux et de fonctions valuables
340. lA A gt 2 L2 bd L a R gles pr d finies et proc dures externes Exemples gt assert hors de x y ql hors de x q l x y x y gt assert hors _de x gt list hors_de x gt hors_de x y ql gt hors_de x q Ce dy 0 asserta T Q Fonction identique assert compatibilit Edinburgh Classe R gle pr d finie Prolog II Edinburgh Cat gorie Gestion des r gles et des identificateurs Param tres connus TetQ Messages d erreur si Q n est pas une liste classique si T est une t te de r gle incorrecte Identique assert T Q ProloglA 207 2 gens 2 Bol R gles pr d finies et proc dures externes L assert T Q Fonction Ajout d une r gle la fin de son paquet Classe R gle pr d finie Prolog MI Cat gorie Gestion des r gles et des identificateurs Param tres connus TetQ Messages d erreur si Q n est pas une liste classique si T est une t te de r gle incorrecte Description Ajout d une r gle la fin de son paquet M me fonctionnement que assert mais l ajout se fait au dessous et non au dessus du paquet correspondant T Exemple les deux commandes suivantes dans l ordre indiqu produisent l insertion du m me programme conc que ci dessus Exemples assert conc Il Y Y 1l assert conc E X Y E Z conc x Y Z l assertz T Q
341. lA 489 Primitives graphiques Pelay 128 un seul item a la fois peut tre s lectionn gr popupltem r l n1 gr popupltem r l n1 n2 Cr e un champ valeurs propos es Ceci correspond ce qui est appel un menu pop up dans la Toolbox Il ne faut pas confondre ce type d objet avec les menus fugitifs li s des fen tres menus activ s par option clic et permettant de lancer des actions de fa on asynchrone Descriptions des arguments l est une liste de constantes r est le rectangle dans lequel est affich l item num ro n1 de la liste l Si n2 est absent l item est simplement dessin Si n2 est pr sent un menu pr sentant la liste des choix 1 vient recouvrir l item et l inversion des champs est g r e tant que le bouton de la souris reste appuy Lorsque le bouton est rel ch le champ s lectionn est dessin dans le rectangle la place du pr c dent et n2 est unifi avec le num ro de l l ment s lectionn n1 si aucun champ n est s lectionn Exemple lorsque la fen tre graphique est rendu visible gt gr_popupItem lt 20 20 120 40 gt aa bb ce dd 3 4 2 gr_click 1 x y gr_popupItem lt 20 20 120 40 gt aa bb ce dd 3 4 2 i Lorsque vous cliquez dans la fen tre en maintenant le bouton appuy 490 ProloglA Bolig Primitives graphiques bb p cC dd 3 4 Impression de fen tres gr_print s gr_p
342. le habite_a Remi Paris gt gt gt Les r gles sont ins r es dans l ordre o on les a tap es Entrons la commande list qui affiche toutes les r gles donn es par l utilisateur gt list habite_a Jacques habite_a Remi gt habite_a Annie Marseille Paris Paris gt gt gt Faisons quelques essais avec ce programme o habite Jacques x Paris gt gt habite_a Jacques x Qui habite Paris x Jacques x Remi gt gt habite_a x Paris PrologIA Bolig D buter avec Prolog III Qui habite o habite_a x y x Jacques y Paris x Remi y Paris gt x Annie y Marseille gt A chaque fois la r ponse du syst me est l ensemble des valeurs donner aux variables figurant dans la question pour que la relation correspondante soit satisfaite Pour terminer la session on tape la commande gt quit Prolog Quit et on se retrouve sous l interpr te de commandes du syst me d exploitation 2 Utilisation d un programme d exemple Chargement du programme Dans ce qui suit on utilisera le programme contenu dans le fichier menu p3 Il s agit du calcul des repas l gers r crit en Prolog II tr s connu mais tr s p dagogique Ce programme est livr avec l interpr te Il suffit de lancer Prolog III comme pr c demment puis
343. le S de contraintes en un ensemble C S A de conditions sur des arbres Par cons quent une r gle telle que 1 engendre tout un ensemble de r gles portant sur des arbres une pour chaque affectation A qui rend vraies les conditions C S A de la forme 40 41 42 An 2 1 1 Nous ignorerons pour le moment le cas de la coupure qui peut figurer dans une queue de r gle la place d un terme ProloglA 61 Concepts de base Une telle r gle sans variable exprime une propri t logique qui s nonce si 41 42 an sont des faits alors 40 est un fait Dans le cas n 0 on a une r gle sans queue 40 gt 3 la propri t logique correspondante est tout simplement 40 est un fait Dans ces conditions l ensemble qu un programme Prolog III d finit est le plus petit ensemble de faits satisfaisant toutes les propri t s logiques engendr es par les r gles du programme Ce dernier est donc compos de r gles qui noncent des faits explicites les r gles sans queue et sans variable du type 3 et de toutes les autres r gles qu on peut voir comme des proc d s de d duction pour produire les faits implicites Consid rons par exemple le programme tr s simple prix fleurs 120 gt prix chocolats 90 gt prix vin 50 gt prix poisson seche 40 gt cadeau chocolats gt cadeau vin gt cadeau fleurs gt cadeau_pas_cher X gt cadeau X prix
344. lentes Prolog a cod les r gles prises dans le fichier menu p3 sous une forme canonique et ne peut plus les d coder pour produire le texte initial car ProloglA 9 Bulag D buter avec Prolog III il existe une infinit de textes initiaux possibles Le fichier menu p3 n est pas modifi par Prolog Faisons un essai avec ce programme Demandons de quoi est constitu un repas l ger cela se traduit par epasLeger h p d radis p boeuf d fruit radis porc d fruit d fruit radis sole d glace radis thon d fruit R h h P h radis p sole h P h P h pate p sole d fruit VAR nm mn V Suppression dition sauvegarde Si nous voulons changer notre menu en rempla ant les r gles Viande boeuf 5 gt Viande porc 7 gt par les r gles Viande veau 4 gt Viande boeuf 5 gt Viande porc 7 gt il nous suffit de supprimer le paquet de r gles ayant pour nom Viande puis d ins rer le nouveau paquet gt suppress Viande gt Viande veau 4 gt gt Viande boeuf 5 gt gt Viande porc 7 gt 10 ProloglA Bulag D buter avec Prolog II observons le paquet de nom Viande en utilisant la commande list gt list Viande Viande veau 4 Viande boeuf 5 Viande porc 7 gt Ex cutons nouveau le programme gt RepasLe
345. les que seule la porte 1 est en panne Ce probl me n est pas sp cialement trivial Une id e pour le r soudre consiste exhiber non pas les jeux de tests qui nous int ressent mais le compl mentaire de ceux ci parmi les solutions pr c dentes Il suffit pour cela de ne retenir parmi les solutions qui v rifient le syst me de contraintes pour ProloglA 139 Les contraintes bool ennes P1 1 celles qui v rifient galement le syst me quand P1 0 Voici la requ te correspondante gt circuit lt 1 P2 P3 P4 P5 gt lt X1 X2 X3 gt lt Y1 Y2 gt circuit lt 0 P2 P3 P4 P5 gt lt X1 X2 X3 gt lt Y1 Y2 gt booleans lt X1l X2 X3 VY1 Y2 gt Une autre solution envisageable consiste a se placer un m ta niveau et utiliser une n gation par chec puisque l on veut conna tre les donn es qui d une part v rifient le syst me de contraintes lorsque P1 est vrai et d autre part qui ne v rifient pas celui ci quand r1 est faux Voici tout d abord le pr dicat non tout fait classique en Prolog qui s efface si le pr dicat P ne peut pas tre effac non P gt P fail non P gt On peut alors poser notre requ te de la mani re suivante gt circuit lt 1 P2 P3 P4 P5 gt lt X1 X2 X3 gt lt Y1 Y2 gt booleans lt X1 X2 X3 Y1 Y2 gt non circuit lt 0 P2 P3 P4 P5 gt lt X1 X2 X3 gt lt Y1 Y2 gt Il faut noter ici que l num ration
346. les relations sont les suivantes t c oetp 4c 20 et s expriment naturellement en Prolog IT gt t c 0o p 4c 20 t o c p 20 4c gt Prolog r pond par un syst me d quations ce qui signifie que le syst me est soluble Allons un peu plus loin en donnant des valeurs certaines variables Comme il s agit d un syst me de deux quations quatre inconnues nous allons fixer les valeurs de deux des variables pour obtenir les valeurs des deux autres Fixons le nombre de pattes 14 et le nombre de t tes 5 gt t c o p 4c 20 p 14 t 5 t 5 c 2 0 3 p 14 gt Prolog nous dit cette fois ci que la solution est unique en nous fournissant les valeurs des variables pour lesquelles l ensemble de contraintes est v rifi On aurait pu bien videmment fixer n importe quel couple de variables pour avoir une solution unique Avant de continuer avec cet exemple nous allons afin de ne plus donner explicitement le syst me d quations d clarer dans Prolog une r gle liant les quatre variables et les quations Par la suite nous n utiliserons plus que cette relation Entrons gt ChatsOiseaux c o p t gt t c o p 4c 20 gt 1 4 PrologilA Bolig D buter avec Prolog III Nous venons d introduire dans Prolog une r gle dont la s mantique est sous r serve que le syst me de contraintes soit v rifi la relation ChatsOiseaux c o p t est v
347. leur t2 0 sinon Les valeurs de 1 et t2 doivent tre des constantes de m me type Pour les entiers et les r els on prend la relation lt entre les nombres Pour les cha nes on prend l ordre lexicographique et pour les identificateurs on prend l ordre lexicographique sur les cha nes associ es infe f1 t2 valeur infe t t2 1 si valeur t1 lt valeur t2 0 sinon Les valeurs de t1 et t2 doivent tre des constantes de m me type Voir inf sup f1 t2 valeur sup t1 t2 1 si valeur t1 gt valeur t2 0 sinon Les valeurs de t1 et t2 doivent tre des constantes de m me type Voir inf supe f1 t2 valeur supe t1 t2 1 si valeur t1 valeur t2 0 sinon Les valeurs de t1 et t2 doivent tre des constantes de m me type Voir inf if t ti t2 valeur if t t1 t2 valeur t1 si valeur t 0 valeur t2 sinon trunc t valeur trunc t conversion en entier de la valeur de t abs t valeur abs t valeur absolue de valeur t La valeur de t doit tre de type entier ou flottant PrologIA 171 Doli L environnement 4 Les fonctions suivantes donnent un r sultat de type r el Les fonctions trigonom triques travaillent avec des angles exprim s en radians atan f valeur atan t arc tangente de valeur t cos t valeur cos t cosinus valeur t exp f valeur exp t exponentielle valeur t In valeur In t logarithme n p rien valeur
348. li rement subtils Pour en finir avec les termes remarquons que la prise en consid ration sp cifique des op rations arithm tiques et bool ennes par le c ur de Prolog III a des cons quences dont la finesse m rite d tre soulign e Examinons par exemple les deux termes X 0 Le premier d signe l ensemble de tous les arbres tout l ment du domaine de Prolog III peut tre repr sent dans un programme par la variable x Le second comporte des l ments connus l op ration d addition et la constante 0 Ce terme repr sente comme nous l avons dit l ensemble des arbres qu on peut obtenir en donnant des valeurs la variable x Or l addition n est d finie que sur les valeurs num riques c est dire des arbres r duits une feuille tiquet e par un nombre et elle rend pour r sultat des valeurs num riques d autre part tout nombre y peut s crire sous la forme y x 0 Par cons quent le terme x o d finit le sous ensemble du domaine de Prolog II constitu par tous les nombres On peut d signer ce m me sous ensemble par le terme ou encore de mani re plus conomique par le terme 48 ProloglA Prelog Concepts de base X en effet l op ration arithm tique unaire impose son op rande d tre un nombre et rend ce nombre comme r sultat Remarquons au passage que bien que qualifi e d op ration neutre il serait bien trompeur de prendre le unaire pour une op ration sans effe
349. lig R gles pr d finies et proc dures externes in_real R Fonction Lecture d un flottant Classe Proc dure externe Prolog M II Cat gorie Entr es sorties Param tres connus Aucun Messages d erreur Fin de fichier inattendue Description Lit un flottant sur l unit active d entr e Si une fin de fichier est d tect e une erreur est signal e et tout se passe comme si on avait fait un close_input Exemples gt in real R 52 451278952645213E17 R 5 245127895264521e 18 gt in _reali R 100 00 R 1 000000000000000e 02 gt in _reali R 100 gt Remarque in_real lit un objet ayant la syntaxe d un flottant l exclusion des entiers i e le point d cimal est obligatoire Voir galement e in_char in_char in_ident in_integer inl in_sentence in_string in_term next_char next_char ProloglA 265 Bulag R gles pr d finies et proc dures externes in sentence T1 T2 T3 Fonction Lecture d une phrase Classe Proc dure externe Prolog M II Cat gorie Entr es sorties Param tres connus Aucun Messages d erreur Fin de fichier inattendue Description Lit une phrase qui se termine par ou et la met sous la forme de trois listes respectivement unifi es avec T7 T2 et T3 T1 est la liste des unit s lexicales mots nombres caract res sp ciaux etc constituant la phrase T3 est la liste obte
350. lle association pourra se faire par le biais de la commande shell setenv Exemple setenv essai 17 prolog3 gt getenv essai S Eee G i PrologIA 259 Bolig R gles pr d finies et proc dures externes ident I Fonction Classe Cat gorie Param tres connus Messages d erreur V rifie que I repr sente un identificateur connu Proc dure externe Prolog II V rification de types Aucun Non Description V rifie que le terme I repr sente un identificateur connu et choue dans le cas inverse Exemples ident nuit blanche ident nuit blanche ident x ident Remarques Dans le troisi me exemple le but est ex cut avec succ s car il s agit d un identificateur quot Dans le quatri me c est un caract re et donc un chec Voir galement e is _ident 260 PrologilA Bolig R gles pr d finies et proc dures externes in char C Fonction Lecture d un caract re Classe Proc dure externe Prolog M II Cat gorie Entr es sorties Param tres connus Aucun Messages d erreur Fin de fichier inattendue Description Lit un caract re sur l unit active d entr e Si une fin de fichier est d tect e une erreur est signal e et tout se passe comme si on avait fait un close_input Exemples in char x in char Y X 12 Y a in char X 1 X
351. lle des exemples montr s ici puisque la notation compl te d un identificateur comporte un qualifieur ou pr fixe qui indique le module auquel l identificateur appartient L ensemble des modules intervenant dans un programme Prolog IIT r alise une partition de l espace des noms lui permettant d tre gigantesque tout en restant facile appr hender par le programmeur Cependant l existence par ailleurs d un contexte de lecture criture permet le plus souvent de n utiliser que des notations simplifi es pour les identificateurs Les notions de module de qualifieur et de contexte de lecture criture sont expliqu es au chapitre Le contr le et l environnement des programmes 24 PrologiA Bolig Bolig Concepts de base Les caract res Tous les caract res disponibles sur votre machine peuvent tre utilis s dans un programme Prolog III Les caract res imprimables peuvent tre exprim s en les encadrant par des anti apostrophes A a D lt Les caract res non imprimables et ceux ayant un r le sp cial peuvent tre indiqu s au moyen du caract re d chappement anti slash selon une convention proche de celle utilis e dans la communaut UNIX Par exemple RASS indique le caract re h indique le caract re nouvelle ligne x41 indique le caract re a de code ASCII 41 en hexad cimal 101 indique le caract re a de code ASCII 101 en octal De indique le cara
352. logIA 369 Ed L a La Ed ANA R gles pr d finies et proc dures externes Hs Les fonctions suivantes donnent un r sultat de type r el Les fonctions trigonom triques travaillent avec des angles exprim s en radians atan t valeur atan t arc tangente de valeur t cos t valeur cos t cosinus valeur t exp t valeur exp t exponentielle valeur t In t valeur In t logarithme n p rien valeur t rad t valeur rad t conversion en radian valeur t sin t valeur sin t sinus valeur t sqrt t valeur sqrt t racine carr e valeur t tan t valeur tan t tangente valeur t Voir galement e assign def_array undef_array redef_array 370 ProloglA Bolig R gles pr d finies et proc dures externes Index des r gles pr d finies proc dures externes et fonctions valuables abs 369 add 368 add_implicit 202 arg 203 arg2 204 arg3 205 assert 206 assert 208 asserta 207 assertz 208 assign 209 atan 370 block 212 block_exit 212 bool 214 bound 215 bound_conc 216 bound_mult 217 bound_ size 218 bound_tree 219 bound_tree 220 char 221 char_code 222 close_context_dictionary 223 close_input 224 close_output 225 conc3 226 conc_string 227 cos 370 cpu_time 228 current _context 229 current_predicate 230 cut 231 def_array 232 default 234 dictionary 235 dif 237 div 238 368 dot 239 echo 240 341 edinburgh 241 edit 242
353. lower bound R1 R2 Fonction Borne inf rieure d une expression num rique Classe R gle pr d finie Prolog III Cat gorie Contraintes num riques Param tres connus R1 Messages d erreur Expression non born e Erreur 59 Arguments de mauvais type Erreur 60 Description Calcule la borne inf rieure m i e le plus grand des minorants de R1 et ajoute au syst me de contraintes courant la contrainte R2 m Provoque une erreur lorsque R1 ne peut tre typ num rique Erreur 60 ou encore lorsque l expression num rique R1 n est pas born e inf rieurement Erreur 59 Exemples gt lower bound R R R 2X Y X gt 2 Y gt 3 R 7 se gt lower bound R R R 2X Y X gt 2 Err 59 Expression non bornee lors d un calcul d extremum gt lower boundi R R R 2X Y X gt 2 Y gt 3 gt Remarques On rappelle que dans l ensemble des r els toute partie non vide qui poss de un minorant admet une borne inf rieure On veillera donc au pr alable borner R1 inf rieurement On notera galement que l ex cution de lower_bound R1 R2 ne pose pas la contrainte R1 R2 On pourra utiliser la primitive block pour la r cup ration des erreurs Voir galement e upper_bound maximum minimum maximize minimize ProloglA 295 mxxxiil 2 gens 2 Boli R gles pr d finies et proc dures externes L upper_bound R1 R2 Fonction Borne sup rieure d une
354. lt 0 e gt 0 circuit c a b clas b 456 d gt c d b Rappelons qu une r gle ou une requ te peut tre syntaxiquement correcte sans qu elle soit pour autant valide et accept e par le syst me Prolog III Les restrictions s mantiques par le typage par exemple r duisent fortement les constructions potentielles permises par la syntaxe 440 ProloglA A sn Syntaxes Quelques remarques Caract re espace Formulons quelques remarques sur le statut du espace Il peut tre ins r partout sans effet de bord sauf l int rieur d une variable d une constante d un but de la forme tt gg o un espace entre tt et la parenth se cr erait une scission en deux buts tt et gg ou une erreur de syntaxe De m me espace peut tre enlev de partout sauf l int rieur d une constante et aux endroits o son retrait provoque la fusion de deux unit s lexicales en une seule Continuation de ligne La s quence lt retour chariot gt est compl tement ignor e pendant la lecture de terme et de r gles Cela r sout des probl mes de pr sentation chaine ou nombre trop long Par exemple regle 123456 78912 gt le 7 tant bien en d but de la seconde ligne est la m me chose que regle 12345678912 gt Prolog IA 441 A Syntaxes Les diff rents commentaires Un commentaire est une suite de caract res parenth s s par les groupements particuliers e
355. m rique contrainte repr senter une valeur positive ou nulle les deux variables x et y sont des variables num riques non contraintes Les in quations Les in quations rencontr es sont transform es de la mani re suivante en introduisant une variable suppl mentaire a appel e variable d cart est transform e en X Y a a gt 0 X Y a a gt 0 Y X a a gt 0 Y X a a gt 0 Cette transformation effectu e la contrainte de type quation est mise sous forme normale comme expos plus haut Voici deux exemples de contraintes lin aires et la forme propos e en sortie par l interpr teur PrologiA 103 Les contraintes num riques Par souci de lisibilit les variables d cart cr es par Prolog III ont t gt X 3Y gt Z 2T T 1 2 Z 3 2 Y 1 2 X 1 2 X X gt 0 gt 0 lt 7 11 x 4 6 Y Y 21 22 x 3 2 X X gt 0 renomm es 3 R gles pr d finies et proc dures ex ternes sp cifiques enum N Cette r gle pr d finie permet d num rer toutes les valeurs enti res que peut prendre le terme N dans le domaine de valeurs d fini par l ensemble de contraintes courant Cette r gle pr d finie permet de r aliser des programmes dans lesquels interviennent des nombres entiers Le principe de base bien s r consiste contraindre le terme auquel on s int resse de la mani re la plus compl te possible ceci afin de minimiser le
356. m tres connus Aucun Messages d erreur Fin de fichier d entr e Description X est unifi avec le num ro de code ASCII du prochain caract re lu sur l entr e courante La primitive sous jacente est in_char La conversion du caract re en code ASCII est faite par la primitive char_code Voir galement e in_char get 388 ProloglA Bolig R gles pr d finies Edimbourg is X T Xis T Fonction Evaluation d un arbre Classe Primitive Edimbourg Cat gorie Evaluation de fonctions pr d finies Param tres connus be Messages d erreur Erreur dans val Description Le terme T est valu et la valeur obtenue est unifi e X L valuation d un identificateur donne lui m me moins qu il lui ait t auparavant assign une constante is est implant e l aide de la primitive val Xis Y val Y X Remarque Les op rateurs lt gt lt gt ne sont pas disponibles dans le membre droit de is il faut utiliser respectivement inf sup infe supe en notation fonctionnelle Exemples X is add exp 1 0 1 X 3 7182818284590e 00 Y is 3 4 X is add 2Y 4 sin l Y 12 X 6 8414709848078e 00 X is 3 4 lt 44 3 mettre un blanc entre 3 et Erreur dans val X is inf 3 4 x Voir galement e val PrologiA 389 Bolig R gles pr d finies Edimbourg listing listing I listing lt I A gt Foncti
357. maximal d impression compl te des arbres Le niveau maximal d un arbre tant 0 quand c est une feuille un entier plus grand sinon Par exemple si maxlevel vaut 0 le terme eq x gg y sera imprim eg et si maxlevel vaut 1 il sera imprim 2022 ProloglA Bolig Outils de mise au point eq x gg La profondeur de cet arbre tant 2 positionner maxlevel 2 l imprime compl tement Une valeur de 1 indique une impression compl te sans restriction de niveau maxarg valeurs 1 valeur par d faut 1 Indique le nombre maximal d arguments imprimer que ce soit des arguments de fonctions ou de tuple Si maxarg vaut 0 le terme eq x gg y sera imprim eq 2 indiquant que deux arguments sont pr sents et non imprim s Si maxarg vaut 1 eq x 1 sera affich n indiquant qu il reste une suite de n arguments non imprim s Une valeur de 1 indique une impression de tous les arguments maxexpr valeurs 1 valeur par d faut 1 Indique le nombre maximal de mon mes imprimer au sein d une expression num rique Cette option se comporte un peu comme maxarg et imprime le reste des mon mes sous la forme nm ou n est le nombre de mon mes restant Par exemple si maxexpr vaut 1 le terme eqg z 4y 18 7 x t u sera imprim eg z 3m u Une valeur de 1 indique une impression de tous les mon mes maxstr valeurs 1 valeur par d faut 1 Ind
358. mbinaisons possibles sont les suivantes f fx fy xf yf xfx yfx xfy Lorsque N est gal 0 op a pour effet de supprimer la d claration existante pour l op rateur S Exemples op 400 xfx write X Y X Y 396 ProloglA Bolig R gles pr d finies Edimbourg put X Fonction Envoie sur l unit courante le code ASCII X Classe Primitive Edimbourg Cat gorie Entr es Sorties Param tres connus X qui doit tre entier Messages d erreur Non Description Le code de caract re ASCII X est envoy sur l unit de sortie courante Echoue si X n est pas un entier Exemples put 65 put 66 put 67 nl Voir galement e out outm ProloglA 397 Bulag R gles pr d finies Edimbourg read T Fonction Lit un terme sur l unit courante d entr e Classe Primitive Edimbourg Cat gorie Entr es Sorties Param tres connus Aucun Messages d erreur Erreurs de syntaxe diverses Description Lit le prochain terme se trouvant sur l entr e courante Celui ci doit se terminer par un point suivit d un espace ces caract res sont lus L argument T est alors unifi avec ce terme Cette primitive est bas sur in_term Exemples Voir galement e in_term 398 ProloglA Bolig R gles pr d finies Edimbourg retract X Fonction Classe Cat gorie Param tres connus Messages d
359. me X L op N I1 S op N Il S 12 X Y gt Y sO Y Ji Y XIY call P nonvar T true var T lt X Y X Y lt X Y X Y gt X Y gt X Y is X T consult S get X getO X nl put X 533 Annexes Bolig read T see F seen tab N tell F told write T writeq T Gestion des r gles et des identificateurs V rification de types 534 abolish lt I A gt abolish I assert T asserta T assertz T clause T Q listing listing lt I A gt listing T retract X retractall T atom T atomic T number R ProloglA a Annexes C Quelques programmes Prolog Ill crits en syntaxe Edimbourg Un petit exemple menu p3e Calculs sur les grands nombres fact p3e Calculs bancaires bank p3e Manipulation d arbres leaves p3e Un peu de logique god p3e Un probl me de Lewis Caroll lewis p3e D tection de pannes dans un additionneur circuit p3e Un puzzle num rique send p3e Un probl me de remplissage rectangle p3e NS V1 BR W ND mn Les programmes d exemples de cette annexe sont des traductions en syntaxe Edimbourg des principaux programmes donn s dans ce manuel PrologiA 535 Bola Annexes A 1 Un petit exemple menu p3e Le programme Le fameux repas equilibr repasLeger H P D horsDoeuvre H I plat P J dessert D K I gt 0 J gt 0 K
360. meOval Dessine le p rim tre de l ovale inscrit dans le rectangle 5 paintOval Remplit l ovale avec le motif associ au crayon 474 ProloglA Bolig Primitives graphiques 6 eraseOval Efface l ovale et son contenu 7 invertOval Inverse les bits de l ovale 8 frameRoundRect Identique frameRect mais avec des coins arrondis 9 paintRoundRect Identique paintRect mais avec des coins arrondis 10 eraseRoundRect Identique eraseRect mais avec des coins arrondis 11 invertRoundRect Identique invertRect mais avec des coins arrondis 12 clipRect D finit un rectangle dont le contour n est pas trac Seule la partie des dessins ult rieurs situ e l int rieur du rectangle sera visible Autrement dit on d finit un rectangle de visibilit pour tous les dessins venir Pour en annuler l effet refaire gr_rect 12 r en donnant pour r un rectangle arbitrairement grand comme par exemple lt 1000 1000 1000 1000 gt gr_polygon n L Dessin d un polygone dans la fen tre graphique courante L est une liste binaire de doublets lt x 7 gt indiquant les coordonn es des points d finissant le polygone Le premier argument n qui repr sente un entier ou un identificateur d termine la proc dure appel e 0 frame Dessine le p rim tre du polygone 1 paint Remplit le polygone avec le motif associ au crayon 2 erase Efface le contenu du polygone certaines lignes bris es formant le
361. mener p n trer jusque dans ses moindres d tails un langage qui initialise une nouvelle tape de la programmation logique En attendant vos critiques et remarques nous vous souhaitons beaucoup de satisfactions avec Prolog III Les auteurs ProloglA Pely Bolig Diff rences entre la version 1 2 etla version 1 3 Cette nouvelle version de Prolog III apporte un certain nombre de modifications par rapport la version pr c dente Bien s r les bogues connus ont t corrig s et certaines lacunes de la documentation combl es Nous remercions ce propos tous ceux qui ont eu la gentillesse de nous faire part de ces imperfections Mais l objectif essentiel de cette refacture est l implantation d un d bogueur symbolique que nous n h siterons pas appeler debugger dans tout le manuel Cette nouvelle version voit galement l introduction de nouvelles primitives num riques Il est maintenant possible de r cup rer et traiter les erreurs se produisant en cours d ex cution par l extension des primitives block et block_exit En ce qui concerne les r gles pr d finies et proc dures externes nous en avons ajout de nouvelles ou parfois mieux document d anciennes Voici la liste de ces primitives qui sont d crites en d tail dans le chapitre r serv cet effet Ont t ajout es ou tendues LA minimize R block block_exit break S1 break S1 8S2 debug lower _ bound
362. ment du pr dicat suivant repeat gt repeat gt repeat PrologIA 329 R gles pr d finies et proc dures externes reset _cpu_time Fonction Initialisation du chronom tre Classe R gle pr d finie Prolog MI I Cat gorie Environnement Param tres connus Aucun Messages d erreur Non Description R initialise le chronom tre Voir galement e cpu_time 330 ProloglA Bolig Bolig R gles pr d finies et proc dures externes resume trace Fonction Relance la trace si celle ci a t inhib e par la primitive suspend_trace Classe Proc dure externe Prolog IM M Cat gorie Environnement Param tres connus Aucun Messages d erreur Non Description Relance la trace si celle ci active a t inhib e par la primitive suspend_trace La r union de ces deux primitives est extr mement utile lorsque l on d sire supprimer la trace de certains pr dicats particuliers Il suffit alors d encadrer ces pr dicats par les primitives suspend_trace et resume_trace Si aucune trace n est active les appels suspend_trace et resume_trace s ex cutent sans actions particuli res Exemples gt essai gt suspend trace outml sans trace resume trace gt trace line essai line line essai essai suspend trace sans trace line gt no trace no trace gt essai sans trace gt Voir galement e
363. mme Prolog peut tre interrompu au moyen d une touche d termin e d pendant du syst me utilis par exemple lt Ctrl C gt Un petit dialogue est alors propos l utilisateur User Interrupt by NC C ontinue K ill T race Q uit lui permettant selon la r ponse fournie de continuer l ex cution C de l interrompre K de continuer l ex cution en mode trace T ou encore de quitter la session Q Les primitives suivantes sont consid r es aussi comme des moyens de contr ler l ex cution d un programme bound x bound x s efface si x est li Une variable est consid r e comme li e si elle est astreinte repr senter un arbre dont e l tiquette initiale est connue e le nombre de fils est connu default f1 t2 La r gle pr d finie default permet de r aliser le contr le suivant si on peut effacer t1 alors on l efface de toutes les mani res possibles sinon on efface tz galement de toutes les mani res possibles Il faut remarquer que cette primitive ne peut pas tre r alis e avec Voyons un exemple d utilisation de cette r gle gt list repondre p gt default p outml personne homme jean gt homme pierre gt gt repondre homme x x jean x pierre gt repondre femme x personne gt PrologIA 167 Doli L environnement 4 free x S efface uniquement si x n est pas li c est dire si
364. mmes Un ou sur deux variables Un ou sur une liste Au plus un de vrai K l ments vrais dans une liste de n bool ens 4 D autres exemples Pannes dans un additionneur binaire Un puzzle logique bool ennes Que trouve t on dans ce chapitre de diagnostic de pannes sur un circuit logique Ce chapitre est consacr aux contraintes bool ennes et leur utilisation Tout en demeurant accessibles au lecteur peu familiaris avec l alg bre de Boole et le calcul propositionnel nous y pr sentons les contraintes bool ennes au travers de leur repr sentation syntaxique mais nous abordons galement des probl mes comme la repr sentation des sorties et la forme normale Le chapitre se poursuit par l examen de divers exemples en suivant une progression r guli re dans les niveaux de difficult rencontr s pour terminer par un exemple proche d une petite application D cembre 1990 Pr ologlA Les contraintes bool ennes 1 Introduction L un des domaines sur lequel on peut faire porter des contraintes en Prolog III est celui des bool ens Les constantes les op rations et les rela tions qui y sont d finies permettent d exprimer toutes les formules du calcul propositionnel et autorisent par l m me une puissance d expression bien sup rieure celle des clauses de Horn ou des r gles de production On est ainsi en mesure pour ce domaine de traiter de mani re rigoureuse la disjonction et la n gation
365. n Le manuel de mise au point de programmes Prolog Ill Cette partie d crit le debugger Prolog III travers son langage de commande et ses primitives Une pr sentation de son mod le est donn e en d but de chapitre et une approche progressive par des exemples d monstratifs am ne naturellement une description plus d taill e de son fonctionnement et de primitives plus complexes ststs ProloglA 3 Pely ProloglA Bolig D buter avec Prolog Ill 1 D marrer une session Prolog III 2 Utilisation d un programme d exemple Chargement du programme Suppression dition sauvegarde 3 Quelques petits exemples Les tuples et les cha nes de caract res L arithm tique et les contraintes num riques Les bool ens et les formules Que trouve t on dans ce chapitre Ce chapitre vous propose un premier contact avec Prolog III travers un petit nombre d exercices dont la principale caract ristique est d tre tr s simples Nous ne cherchons pas introduire les concepts fondamentaux de Prolog III ce sera l objet des chapitres suivants mais uniquement la pratique simple du syst me Prolog III l activer composer un programme l essayer le modifier etc D cembre 1990 Pr ologlA D buter avec Prolog III 1 D marrer une session Prolog Ill La mani re d entrer dans l univers de Prolog III d pend du syst me d exploitation de votre ordinateur Sur UNIX VMS MS DOS etc il v
366. n aire de deux quations deux inconnues Dans le second cas par contre le nombre de valeurs connues ne suffit pas rendre le syst me lin aire et la r ponse fournie par Prolog II donne certains renseignements sur les variables gel es lors du retardement de cette contrainte Pour plus de pr cisions sur ce type de retardement se reporter au chapitre Retardements 5 Formats d entr e sortie Les nombres utilis s en Prolog III se divisent comme nous l avons vu en deux classes les rationnels en pr cision parfaite et les flottants Pour am liorer le confort d utilisation Prolog II autorise un certain nombre de formats de sortie possibles Ces formats sont positionn s gr ce la proc dure externe set _config s T Le premier param tre doit tre une cha ne Pour ce qui concerne les formats de sortie num rique s doit tre gal format_out_num Les valeurs possibles pour le second param tre T sont alors ProloglA 107 Les contraintes num riques Fnormal affiche les rationnels en pr cision infinie et les flottants en notation scientifique e Fexact rationnels en pr cision infinie les flottants sont convertis e Fdecimal affichage sous forme d cimale e Ffloat affichage en notation scientifique e Fint fract affichage sous la forme partie enti re partie fractionnaire On trouvera des exemples d utilisation la description de set_config au chapitre R gles pr d fini
367. n est pas le pr fixe d une famille ayant une partie ferm e on obtient une erreur Voir la section Structuration saisie et modification des r gles du chapitre Le contr le et l environnement des programmes pour plus de d tails Voir galement e remove_implicit dictionary e set_context current_context close_context_dictionary e module end module 202 ProloglA Bolig R gles pr d finies et proc dures externes arg N T1 T2 Fonction Calcul du N i me argument d un terme Classe R gle pr d finie Prolog III Cat gorie Arbres listes cha nes et tuples Param tres connus N qui doit tre un entier positif ou nul Messages d erreur N est inconnu n gatif ou plus grand que le nombre d arguments de T1 Description Cette primitive pose la contrainte T2 N o N est le N i me argument du terme T1 Exemples Si N est nul T2 est gal l tiquette initiale de T1 arg 2 exemple X Y 5 T Y arg 3 exemplelLl T L V lt T gt V V 2 arg 0 exemplelLl T T exemple L tuple arg 5 exemple X Y 5 T ERREUR 228 Argument de mauvais type arg 3 U T U tuple U V lt T gt V V 2 arg 2 A B C T B C Voir galement e arg2 arg3 ProloglA 203 R gles pr d finies et proc dures externes Bulag arg2 N L T Fonction Classe Cat gorie Param tres connus Messages d erreur
368. n retard e de tuples avec contraintes arithm tiques sur les tailles Classe R gle pr d finie Prolog II Cat gorie Arbres listes cha nes et tuples Param tres connus Voir ci apr s Messages d erreur Non Description Pose le syst me de contraintes U3 U1 U2 U1 N1 U2 N2 U3 N3 N3 N1 N2 N1 gt 0 N2 gt 0 N3 gt 0 avec les retardements n cessaires si N1 N2 ou N3 ne sont pas connus Exemples gt conc3 U V U Voir galement e size bound_size bound_conc 226 ProloglA Bolig R gles pr d finies et proc dures externes conc_string S1 S2 S3 Fonction Concat nation de cha nes Classe R gle pr d finie Prolog MI Cat gorie Arbres listes cha nes et tuples Param tres connus Voir ci apr s Messages d erreur Non Description Enum re tous les triplets S1 S2 S3 de cha nes telles que S3 est la concat nation de S1 et S2 Les cha nes 51 S2 S3 doivent tre suffisamment connues pour produire des ensembles finis de triplets Exemples gt conc string ab cd s s abcd gt conc string s1l s2 abcd si lt gt s2 abcd si a s2 bcd sl ab s2 cq sl abc s2 q sl abcd s2 lt gt PrologIA 227 Ed L ka Ed ol R gles pr d finies et proc dures externes ee cpu_time N Fonction Obtention d un temps cpu Classe Proc dure externe Prolog M I Cat gor
369. nction D claration de fin de module Classe Proc dure externe Prolog M I Cat gorie Gestion des r gles et des identificateurs Param tres connus P Messages d erreur Non Description D finit toutes les r gles comprises entre les appels aux primitives module et end_module comme d crivant le m me module On se reportera pour ces notions assez complexes au chapitre Environnement On rappelle cependant pour m moire que P est le pr fixe du module et que ce pr fixe doit tre le m me que celui d fini dans la primitive module correspondante Voir galement e module e set_context current_context close_context_dictionary e add_implicit remove_implicit dictionary PrologIA 243 2 gens 2 Boli R gles pr d finies et proc dures externes L enum R Fonction Enum ration enti re Classe Proc dure externe Prolog M I Cat gorie Contraintes num riques Param tres connus Aucun Messages d erreur Non Description Enum re toutes les constantes enti res n telles que la contrainte R n soit satisfaisable L ordre d num ration est ind fini L int r t de cette r gle pr d finie r side dans la possibilit d num rer des variables enti res dans un domaine de valeurs limit l aide de contraintes num riques portant sur des rationnels ou des r els Exemple gt enum R 1 5 R 3 2 0 1 244 ProloglA Bolig R gles p
370. nction D finition de l unit courante d entr e Classe Primitive Edimbourg Cat gorie Entr es Sorties Param tres connus F qui doit tre une cha ne ou un identificateur Messages d erreur Fin de fichier inattendue Impossible d ouvrir le fichier Description Se comporte comme input F si F est une cha ne Dans le cas o F est un identificateur c est la cha ne correspondant son abr viation qui est prise en compte comme nom d unit pass e input c est dire que le pr fixe est ignor Voir galement e input close_input seen PrologIA 401 Bolig R gles pr d finies Edimbourg seen Fonction Fermeture de l unit courante d entr e Classe Primitive Edimbourg Cat gorie Entr es Sorties Param tres connus Aucun Messages d erreur Impossible de fermer le fichier Description Se comporte comme close_input Voir galement e input close_input see 402 ProloglA Bolig R gles pr d finies Edimbourg tab N Fonction Impression de N blancs sur la sortie courante Classe Primitive Edimbourg Cat gorie Entr es Sorties Param tres connus N qui doit tre un entier connu Messages d erreur Argument de mauvais type Description Envoie N blancs sur l unit courante de sortie Lorsque N n est pas un entier connu un message d erreur est affich Voir galement e line outm put writeq PrologilA 403 Bolig
371. ndroits du programme et on souhaite r cup rer l espace Prolog III entre les deux fichier monprog c include macuser h main int err travail ProloglA 1027 Utilisation de Prolog III sur Macintosh Pl err Pro3linitial 0 NULL PROCALL if err ERR3 NOERR printf Pas pu initialiser Prolog III n exit 1 travail err Pro3Goal out c c 1 2 travail err Pro3Goal out c line c 1 4 travail Pro3Final travail ss travail travail err Pro3linitial 0 NULL PROCALL if err ERR3 NOERR printf Impossible d initialiser Prolog n exit 1 travail err Pro3Goal out c c 1 travail err Pro3Goal outl c fail c 2 travail Pro3Final ntravail ais En supposant que les lignes travail sont vides compilons ce fichier en le liant Prolog III On va produire l ex cutable nomm monprog c o monprog c o monprog c Il faut pour l dition de lien modifier le fichier prolink3 en rempla ant promain c o par monProg c o et en renommant apr s le link le fichier Prolog II new en monProg Link p d c PRO4 t APPL o Prolog IIlL new b sn edit Main monProg c o prolog3 0o userRule c o Libraries RunTime o Libraries interface o CLibraries CRuntime o CLibraries StdCLib o CLibraries CInterface o CLibraries Math o 102
372. ne erreur lorsque un paquet lu existe d j alors que reinsert remplace l ancien paquet par la nouvelle d finition Attention ceci peut tre dangereux par exemple une erreur sur une r gle l int rieur d un paquet peut provoquer avec reinsert l crasement des r gles pr c dentes quand on continuera lire le paquet insert f reinsert f Insertion de r gles partir d un fichier M me fonctionnement que insert mais les nonc s sont lus sur le fichier indiqu Selon que l on a par ailleurs activ ou non le mode cho cf r gle echo les r gles sont affich es sur la console au fur et mesure de leur lecture list Liste sur la sortie courante toutes les r gles d termin es par le pr fixe par d faut du contexte courant list t Liste sur la sortie courante le ou les paquet de r gles indiqu s par t qui doit tre soit un terme de la forme indiqu e ci dessous soit une liste de tels termes c d signe une cha ne de caract res i un identificateur a un entier et v une variable c Toutes les r gles du module de nom c PrologIA 187 Doli L environnement 4 lt a gt Toutes les r gles composant le paquet de nom i et d arit a lt v gt Toutes les r gles dont l acc s est i quelque soit leur arit lt v 4 gt Toutes les r gles d arit a appartenant au module ayant le pr fixe par d faut du contexte de lecture et criture courant dont l arit est 4 1 quivalent de lt i v gt
373. nnus Aucun Messages d erreur Non Description var T est ex cut avec succ s si l on ne conna t pas l tiquette initiale de T et que l on ne sait pas si le nombre de ses fils est nul ou non Echoue dans tous les autres cas Se comporte comme free Exemple var X var X Ul X num U tuple var X var x 1 2 3 var sommetI L var sommet X Y Z var sommet L L lt gt Voir galement e free bound known nonvar PrologIA 407 Bulag R gles pr d finies Edimbourg write T Fonction Impression de termes sans d limiteurs Classe Primitive Edimbourg Cat gorie Entr es Sorties Param tres connus Aucun Messages d erreur Non Description Si T est un identificateur une cha ne ou un caract re write crit T sans les d limiteurs Sinon crit le terme comme le fait la primitive out Actuellement ne tient pas compte des d clarations d op rateurs et emploie la notation fonctionnelle Exemple write x X write chaine chaine write c c write a xX 1 2X str a X 2X 1 str Voir galement e out outm writeq 408 ProloglA Bolig R gles pr d finies Edimbourg writeq T Fonction Impression de termes Classe Primitive Edimbourg Cat gorie Entr es Sorties Param tres connus Aucun Messages d erreur Non Description Ecrit
374. nnus Voir ci apr s Messages d erreur Non Description S ex cute avec succ s si N repr sente un nombre entier connu Echoue dans tous les autres cas Exemples integer 0 integer 1234 4567 integer X 2 Voir galement eo num is num ProloglA 275 2 gens 2 Bol R gles pr d finies et proc dures externes L is_bool B Fonction V rifie que B repr sente une valeur bool enne Classe R gle pr d finie Prolog II Cat gorie V rification de types Param tres connus Aucun Messages d erreur Non Description V rifie que le terme B repr sente une valeur bool enne c est dire que la contrainte b bool appartient au syst me de contraintes courant Echoue dans le cas contraire Exemples is bool 1l is bool B B bool B bool is bool B B Ilboolt Voir galement e bool 276 ProloglA Bolig R gles pr d finies et proc dures externes is_char C Fonction V rifie que C repr sente un caract re Classe R gle pr d finie Prolog III Cat gorie V rification de types Param tres connus Aucun Messages d erreur Non Description V rifie que le terme C repr sente un caract re c est dire que la contrainte C char appartient au syst me courant Echoue dans le cas contraire Exemples is char is char C C char c ichar is char Remarq
375. ns ce mode l utilisateur peut diter des fen tres texte pendant que Prolog II travaille t lt 0 get_key prendra un caract re qui ne peut tre plus g que t ticks 1 60sec avant l appel Echoue si au moment de l appel aucun caract re n est disponible ou si le caract re est trop vieux t gt 0 get_key attendra un caract re pendant au plus t ticks Echouera si aucun caract re n est disponible au bout de ce laps de temps get_key n attend pas que le d lai soit coul pour r ussir si on lui fournit un caract re dans les temps Un caract re peut avoir t tap l avance Ce mode permet de saisir un mot de passe en un temps donn Exemples gt stty USEGETKEY 60 Le prochain appel get_key chouera si aucun caract re non lu n a t tap moins d une seconde avant cet appel 1 s 60 ticks gt stty USEGETKEY 300 Le prochain appel get_key chouera si aucun caract re non lu ne peut tre obtenu dans les cinq secondes suivant cet appel 1 s 60 ticks Le caract re peut avoir t tap l avance get_key r ussira de suite apr s avoir obtenu le caract re sans attendre que le d lai soit coul ProloglA 487 A Primitives graphiques P stty FLUSH Enl ve tous les caract res de la queue d v nements Ils ne sont plus disponibles pour get_key permet get_key de saisir une r ponse qui n a pas t tap e l avance gtty s v
376. ns en effet jamais pr cis que nous voulions des solutions enti res Prolog r sout les quations arithm tiques dans l ensemble Q des nombres rationnels Nous arr terons l cet exemple car il n existe pas de contraintes imposant une variable d tre enti re il nous faudra utiliser un pr dicat pr d fini pour r aliser cette v rification Les bool ens et les formules Prolog manipule aussi les formules et les syst mes de contraintes bool ennes Il en v rifie tout instant la satisfaisabilit et donne un syst me simplifi comme solution Nous ne nous tendrons pas ici sur la notion de simplifi disons juste que le syst me solution est quivalent celui fourni en entr e Donnons par exemple ces trois relations sur les trois variables a b C gt a gt b b gt c c gt a b gt c c gt a a gt b gt Rappelons que ces trois relations implique indiquent que les trois variables a b c sont quivalentes et ont donc m me valeur de v rit sans pour autant que celle ci soit connue Prolog r pond par un syst me identique celui que PL nous avons fourni au d part ce syst me tant en fait d j simplifi Imposons maintenant que l une des trois variables 4 ou b ou c soit vraie Pour cela on ajoute au syst me pr c dent l quation a b c 1 qui dit que la formule a ou b ou c est vraie 1 est la constante Prolog vrai et 0 la constante faux
377. nsert gt lt Do goall lt Stop goal2 gt l gt lt Size lt 1l sizel gt lt 2 size2 1l gt lt 3 size3 gt gt insert sizel u gt gr window u gr text 1 10 1 1 size2 u gt gr window u gr text 1 12 1 1 goall u gt Dans les primitives ci dessous le premier et le deuxi me argument suivent les m mes conventions que pour set_menu 494 1 Sous Sunview chaque lement de la liste de valeurs doit tre une feuille un seul niveau ProloglA A e e o Primitives graphiques check_item u c v Cette primitive positionne ou enl ve le cochage d un item v indique la pr sence du cochage d un item 0 indique non coch 1 indique coch avec la marque standard de la machine Siv estun entier plus grand que 1 le caract re ayant le code v est utilis comme marque Exemple gt check_item 0 Fenetres trace 1 command menu u c v v est le code du caract re utilis en conjonction de la touche commande pomme utilis e comme raccourci pour activer l item sp cifi par les deux premiers arguments Exemple de cr ation du raccourci T pour activer la trace Prolog IM gt char code T n command menu 0 Controle trace n enable menuu c v Permet de d sactiver v 0 ou de r activer v 1 un menu ou un item Exemple pour d sactiver tout le menu d dition gt enable menu 0 Editer 0 ProloglA
378. nt e out outl outm outml ProloglA 309 2 gens 2 Bol R gles pr d finies et proc dures externes L outl T Fonction Ecriture de termes avec lt CR gt Classe R gle pr d finie Prolog MI Cat gorie Entr es sorties Param tres connus Aucun Messages d erreur Non Description Ecrit le terme T sur l unit de sortie courante sans les contraintes associ es aux variables qui peuvent figurer dans ce terme suivis d un retour chariot Voir galement e out outc outm outml 310 ProloglA Bolig R gles pr d finies et proc dures externes outm S1 S2 SN Fonction Ecriture de cha nes Classe R gle pr d finie Prolog MI Cat gorie Entr es sorties Param tres connus S1 S2 SN Messages d erreur Argument de mauvais type Description Ecrit les cha nes S1 S2 SN N 1 sur l unit de sortie courante Une erreur est signal e si une de ces cha nes n est pas connue Voir galement e out outc outl outml ProloglA 311 2 gens 2 Boli R gles pr d finies et proc dures externes L outml S1 S2 SN Fonction Ecriture de cha nes avec lt CR gt Classe R gle pr d finie Prolog MI I Cat gorie Entr es sorties Param tres connus S1 S2 SN Messages d erreur Argument de mauvais type Description Ecrit les cha nes S1 S2 SN N 1 sur l unit de sortie courante
379. nt subtils seseeeeeeesessseesesssessssssnsnsrsnnesenee 48 Ge R MHONS SRE Sr Ne de ne 49 Egalit t in galit uns smart ice 50 IMPOSER Sin ts nel ARR RE les aN 52 Comparaisons numM rIQUES ii 52 Relations twinaires eon sn Un PTT ME ete eur tee 53 Za Contraintes manne Dre 54 DAS D ae aea a a A a E EEE 54 Exemples riepas eera har anni EE a a e aa eraat 56 8 R solution des syst mes de contraintes ss sssssssssssesesessesseseseses 57 9 R gles t TETE era aan i a 60 Sy tA K Eein a Aron at ia E E ENEA aT e ent tente dre E tee et 60 Signification d un programme Prolog IT 62 L ensemble des faits d finis par un programme Prolog III 62 Ex cution d un programme sssssssssssssssssssetrtttttssssstrererttsnnsssssnstet 64 Arbres tuples cha nes et listes esse 69 L Introduction En Le En A R AEN 70 2 PT 0 RE seadis Ena E ia Saina 70 Op rations sur les arbres s is iriiri keski iea 71 Contraintes Sur les arbres rs usines siets o Riri SR 74 Exemples saroe o A ER E O T E EA O te 74 Restrictions sur la contrainte de taille 76 3 LestupleS innii netdi ei eea a A a T aaa aian aii 76 Op ration Skrsi sen ne ma T EEEa aT A EREE Passe 76 Relations ns nn a E EEA 77 Restrictions concernant les tuples 77 Exemples de contraintes sur les tuples 78 R capitulatif des op rations e
380. nue en rempla ant chaque lettre majuscule apparaissant dans un l ment de T1 par la lettre minuscule correspondante T est la m me chose que T3 mais chaque l ment de T3 qui correspond un identificateur connu dans la famille du pr fixe par d faut du contexte courant a t remplac par le symbole conventionnel lt gt pour indiquer ce fait Exemple gt fleuve Rhone gt gt in sentence Tl T2 T3 La vie est un long fleuve tranquille T1 lt La yje est un long fleuve tranquille ARLES T2 lt la yje est un long lt gt tranquille ARLES T3 lt la j yje est un long fleuve tranquille ALES Voir galement e in_char in_char in_ident in_integer inl in_real in_string in_term next_char next_char 266 ProloglA Bolig R gles pr d finies et proc dures externes in sentence T Fonction Lecture d une phrase Classe Proc dure externe Prolog M II Cat gorie Entr es sorties Param tres connus Aucun Messages d erreur Fin de fichier inattendue Description Lit une phrase qui se termine par ou et la met sous la forme d une liste unifi e avec T La listeT contient les unit s lexicales mots nombres caract res sp ciaux etc constituant la phrase Exemple gt fleuve Rhone gt gt in sentence T La vie est un long fleuve tranquille MT lt La vie
381. ock X _ inl D onnee suite boucle de lecture X D onnee L suite boucle de lecture X D onnee lt D onnee gt L gt free X boucle de lecture L suite boucle de lecture 17 _ lt gt fin de fichier close input fichier a lire Ce deuxi me exemple permet de lire des donn es cha nes de caract res dans un fichier et de construire la liste tuple de ces donn es Lorsque l interpr teur Prolog d tecte la fin du fichier il g n re un block_exit avec l entier 17 comme valeur de l tiquette principale correspondant l erreur de fin de fichier Cette erreur peut tre r cup r e par le block englobant puisque son tiquette principale tait une variable lecture dans un fichier et traitement gt input fichier a lire block E C lire et traiter I nfo suite lire et traiter E C I nfo lire et traiter I nfo gt repeat inl I nfo traiter I_nfo suite_lire_et_traiter X free X fail suite lire et traiter 17 _ _ gt fin de fichier close input fichier a lire suite lire et traiter X Y _ gt 1 erreurs non r cup r es close input fichier a lire block exit X Y X lt 9 suite lire et traiter X Y I gt erreurs trait es traiter erreur I X Y block E C lire et traiter I nfo suite lire et traiter E C I nfo traiter erreur I X Y gt PrologIA 212 i R gles pr d finies et proc dures externes Le dernier exemple permet
382. og II Pour cela il suffit une premi re fois de positionner l option syntax Edinburgh puis de sauver l tat courant l aide de la commande exit On invitera chaque utilisateur renommer auparavant le fichier initial3 psv afin d en conserver une version l tat d origine tty_wrap e Un entier compris entre 10 et 4000 repr sentant la longueur maximale admise pour l criture d une ligne sur l unit de sortie courante Valeur par d faut 130 format _float e Une cha ne repr sentant un format d entr e sortie accept par la fonction printf du langage C Cette cha ne doit de plus commencer par le caract re et contenir moins de 19 caract res Valeur par d faut 15le format_out_num e Fnormal Affichage des rationnels en pr cision infinie et des flot tants en notation scientifique e Fexact Affichage des rationnels en pr cision infinie les flottants sont convertis en rationnels e Fdecimal Affichage sous forme d cimale e Ffloat Affichage en notation scientifique e Fint fract Affichage sous la forme partie enti re partie fraction naire si cette derni re est non nulle Valeur par d faut Fnormal Exemples gt set config format out num Fnormal X 120 36 Y 1 5 342 ProloglA Bulag Bulag R gles pr d finies et proc dures externes X 10 3 Y 1 500000000000000e 00 set_config format_out_num Fexact X 120 36
383. oint On se r f rera l option catcherror pour plus d information sur la capture d erreurs On notera galement que le m canisme g n ral des blocs peut tre pist avec cette m me m thode Il faut noter qu l oppos des implantations existantes notre mod le est complet et coh rent repr sentant exactement une imbrication de boites aussi bien en descente qu en remont e avec en particulier un comportement sym trique des portes exit redo et fail Implanter ce mod le de fa on compl te a bien s r amen un surco t Celui ci est nul pour la porte call faible pour les portes exit et fail plus important pour la porte redo qui a t plus sp cialement optimis e Bien s r le fait que l utilisateur soit susceptible de demander des informations sur le programme en cours et en particulier des informations inutiles l interpr teur peut rendre une session de debugging prohibitif puisque pouvant entraver la r cup ration de m moire qui n est alors plus totale et compl te Les portes suppl mentaires impl ment es visent d terminer plus finement le point d ex cution au sein de la boite et l tat du syst me de contraintes avant ou apr s l unification de la t te il n y a pas de surco t particulier ces portes ststs 2034 ProloglA Bulag Ref MPH IIT Fr MMX www prolog heritage org
384. ointeur 1 fail initialise empile 111 empile 222 depile x depile y x 222 y 111 depile x pile vide Voir galement e assign val e undef_array redef_array PrologIA 233 2 gens 2 Boli R gles pr d finies et proc dures externes L default T1 T2 Fonction Contr le de l effacement Classe Proc dure externe Prolog M I Cat gorie Contr le Param tres connus Aucun Causes d chec T1 ou T2 ne repr sentent pas des arbres tiquet s par un identificateur Description La r gle pr d finie default permet de r aliser le contr le suivant si on peut effacer T1 alors on l efface de toutes les mani res possibles sinon on efface T2 Il faut remarquer que contrairement ce que l on pourrait penser premi re vue cette primitive ne peut pas tre r alis e avec Exemple repondre p gt default p outml personne gt repondre homme x x jean x pierre gt repondre femme x personne 234 ProloglA Bolig R gles pr d finies et proc dures externes dictionary Fonction Recherche des modules utilisateurs Classe Proc dure externe Prolog IM I Cat gorie Gestion des r gles et des identificateurs Param tres connus Aucun Messages d erreur Non Description Ecrit sur la sortie courante la forme abr g e des acc s de la famille ayant le m me pr fixe que le pr fix
385. oitation Classe Proc dure externe Prolog M II Cat gorie Environnement Param tres connus 5 Messages d erreur Aucun Description Ex cute une commande du syst me d exploitation repr sent e par la cha ne S Consultez le manuel d utilisation relatif votre syst me d exploitation pour conna tre la liste et la syntaxe des commandes disponibles ProloglA 361 Ed L ka Ed ol R gles pr d finies et proc dures externes ee trace Fonction Trace de l ex cution d un programme Classe Proc dure externe Prolog M I Cat gorie Environnement Param tres connus Aucun Messages d erreur Non Description Mode de trace d un programme avec impression sur l unit courante de sortie de trace des contraintes d galit entre les buts et les t tes de r gles avant unification et visualisation des points de backtracking Cette primitive trace correspond l appel set config machine mode 1 La primitive no_trace permet de sortir de ce mode Voir galement e no_trace debug no_debug trace_file suspend_trace resume_trace e set_config set_configuration get_config get_configuration 362 ProloglA Bolig R gles pr d finies et proc dures externes trace file S Fonction Redirection de la trace Classe Proc dure externe Prolog II Cat gorie Environnement Param tres connus 5 Messages d erreur Non Description Redirection dans le fich
386. olig R gles pr d finies Edimbourg X Fonction Egalit formelle de deux termes Classe Primitive Edimbourg Cat gorie Arbres listes et tuples Param tres connus Aucun Messages d erreur Non Description R ussit quand les termes X et Y sont formellement gaux c est dire quand l ensemble de solutions de X est le m me que celui de Y Sinon chec Cette r gle pr d finie est d finie comme suit X Y not dif X Y Exemples Voir galement e not dif PrologIA 413 Bolig R gles pr d finies Edimbourg X Y Fonction Non galit formelle de deux termes Classe Primitive Edimbourg Cat gorie Arbres listes et tuples Param tres connus Aucun Messages d erreur Non Description R ussit quand les termes X et Y ne sont pas formellement gaux Cette r gle pr d finie est d clar e comme suit X Y not not dif X Y Exemples Voir galement e not dif 414 PrologiA Bolig R gles pr d finies Edimbourg Fonction Egalit des valeurs de deux termes Classe Primitive Edimbourg Cat gorie Evaluation de fonctions pr d finies Param tres connus XetY Messages d erreur Erreur dans val Description Evalue les termes X et Y R ussit quand la valeur de X est gale la valeur de Y sinon chec Cette r gle pr d finie est d crite comme ceci X Y val egl X Y 1
387. on Impression de r gles Classe Primitive Edimbourg Cat gorie Gestion des r gles et des identificateurs Param tres connus Jet A Messages d erreur Argument de mauvais type R gle inexistante Description Ces primitives sont respectivement quivalentes list list l list lt I A gt 390 ProloglA Bolig R gles pr d finies Edimbourg member X L Fonction Recherche d un l ment dans une liste classique Classe Primitive Edimbourg Cat gorie Arbres listes et tuples Param tres connus Aucun Messages d erreur Non Description La primitive member est d crite par les r gles suivantes member X XIL member X _IL member X L Exemples member X Xx 1 x 2 X 3 member 3 member 2 x 2 ProloglA 391 Bulag R gles pr d finies Edimbourg name X L Fonction Conversion de constantes en liste de codes de caract res Classe Primitive Edimbourg Cat gorie Arbres listes et tuples Param tres connus Soit X soit L Messages d erreur Ce n est pas un identificateur Description Si X est un identificateur un nombre un caract re ou un bool en L est unifi avec la liste des codes ASCII des caract res qui constituent le symbole X Si L est une liste de codes ASCII des lettres d un identificateur X est instanci avec l identificateur d termin par les conventions courantes de
388. on passe sur le port ok et ce condition que la cr ation d un point de choix soit justifi e il n y a pas de choix quand on ex cute la derni re r gle d un paquet e On ne peut pas modifier un point de choix attach un pr dicat pr d fini crit en C comme enum e Un point de choix est susceptible de dispara tre si un appel cut ou au garbage collector se produit avant qu on soit revenu cette alternative fail SYNTAXE fail 2020 ProloglA Bulag Bolig Outils de mise au point DESCRIPTION La commande fail fait chouer l action en cours et d pend donc du port courant On peut consid rer cette commande comme l ex cution imm diate de la r gle pr d finie fail Cette commande agit comme step lorsqu on va en marche arri re backtracking Le descriptif suivant indique les changements d tats qui sont en fait assez intuitifs va en FAIL sort de la boite va sur un autre RULE ou sur FAIL va sur no fait step va sur RULE ou FAIL fait REDO ou FAIL selon la pr sence ou pas d un point de choix fait step va sur RULE ou un autre REDO int rieur fait step va sur d autres FAIL ou REDO ext rieurs FAIL tous ports SYNTAXE FAIL DESCRIPTION La commande FAIL d apr s le nom du port fait imm diatement passer au port FAIL de la boite courante Fait step dans le cas o on tait d j au port FAIL c est la poursuite du backtracking Cette commande F
389. on d un programme s obtient e soit en choisissant l item Stop du menu Contr le e soit en pressant simultan ment les touches Commande et A la suite d une telle interruption Prolog II affiche le dialogue Program interrupted by User Continue Trace Les boutons ont la signification suivante Continue Continuer comme s il n y avait pas eu d inter ruption Kill Avorter le programme en cours retour au niveau sup rieur de l interpr te Prolog III PrologilA 1007 Utilisation de Prolog III sur Macintosh Pl Trace Bascule de la trace activation ou d sactivation Quit Abandon de la session Prolog II retour au finder Il est possible de taper la premi re lettre du bouton choisi au lieu de le cliquer Les touches ENTER et retour chariot correspondent au bouton par d faut Continue Il est galement possible de taper un des chiffres de 0 3 indiquant le niveau de trace 0 si pas de trace 2 si on d sire la trace ordinaire On se r f rera la primitive trace pour plus de d tails Il est noter que la r cup ration de m moire n est pas interruptible 3 Sp cificit s de Prolog Ill Macintosh Valeurs extr mes des constantes arithm tiques 1 Les nombres entiers ne sont limit s que par la taille de la m moire de votre ordinateur et la restriction suivante le nombre de mots de quatre octets requis pour repr senter l entier en question doit tre inf rieur 16 777
390. on du dialogue reprend en l tat Pour arr ter le dialogue en cours on peut programmer dans i l ex cution d un block_exit lt fail L gt qui provoquera un bactracking de gr_dialog ou un block_exit lt L gt qui conduira une terminaison normale button2 s i Cet item a le m me comportement que l item button mais cette fois ci la r gle i est appel e avec deux arguments Le premier est une liste d crivant l tat des items du dialogue Le deuxi me est l appel une variable qui doit tre instanci e par la r gle lt i 2 gt avec la liste des items dont la valeur est modifi e Cette r gle est crite par l utilisateur et permet donc d attacher une s mantique quelconque aux boutons La r gle d finit une relation entre le premier argument argument d entr e repr sentant la liste des valeurs actuelles et le deuxi me argument argument de sortie repr sentant la liste des valeurs nouvelles buttonD buttonD s buttonD s i D crit un bouton de terminaison de dialogue avec le label s auquel est associ l action d finie comme pour button s i Usuellement s est la cha ne OK et i est La frappe du retour chariot actionne ce bouton glist l c i L_init D finit une liste de valeurs avec barre de d filement verticale La signification des arguments est ProloglA Bulag Bolig Primitives graphiques Entier qui repr sente le nombre d items qui doivent tre visibles La
391. on la valeur de l option break Seuls les ports d crits par l option breakport sont des points d arriv e pour next La commande n se comporte comme next la diff rence qu aucune impression des ports de boites int rieures n a lieu La commande N agit comme n sauf que les point d arr ts ne sont pas actifs N et n sont des alias utilisant next cont C tous ports SYNTAXE cont C DESCRIPTION Ces commandes sont g n ralement utilis es conjointement avec l utilisation de points d arr t cont l che la bride l interpr teur qui ne reviendra au mode interactif que lors de la rencontre d un point d arr t L impression des ports a lieu ou pas selon la valeur des options print et printport L alias C se comporte comme cont la diff rence qu il n y a pas d impression et rend les points d arr t actifs nextp tous ports SYNTAXE nextp DESCRIPTION Cette variante de next permet de se d placer jusqu au prochain port de cette boite Elle permet par exemple de passer du port EXIT au port REDO Un cas particulier est de faire nextp alors qu on sort irr m diablement de la boite courante que ce soit par le port EXIT sans REDO possible soit par le port FAIL Dans ces cas l option warnnext donne le comportement de nextp Si l option warnnext est 1 un message d erreur est imprim et aucune action n est accomplie Si warnnext est 0 un step est fait en lieu de nextp 2010 ProloglA Bulag Bula
392. ormations dont nous parlons sont donc faites uniquement au moment de leur lecture ou de leur criture 178 ProloglA Bulag Bolig L environnement Un contexte de lecture et criture par d faut est d fini au d marrage de Prolog III et des primitives sont fournies qui vous permettent de d finir vos propres contextes de les nommer de les ranger pour les rappeler ult rieure ment etc Un et un seul contexte de lecture et criture est constamment d fini tout au long d une session Prolog III nous l appellerons le contexte courant Formellement un contexte de lecture et criture est d fini par la donn e d un triplet liste explicite liste implicite pr fixe par d faut O liste explicite et liste implicite d signent par un m canisme expliqu plus loin une grande liste L d identificateurs complets Les conventions d finies par un tel contexte sont les suivantes lors d une lecture e un identificateur complet n est nullement transform e un identificateur abr g coincidant avec la forme abr g e d un l ment i de L est consid r comme repr sentant cet identificateur et est donc compl t avec le pr fixe de i e les autres identificateurs abr g s sont compl t s avec le pr fixe par d faut indiqu Par exemple si la liste L est aa bb aa cc aa dd et le pr fixe par d faut zz alors pp xx est compris comme pp xx car lu sous sa forme compl te cc est compris
393. osh ProloglA Bulag n Primitives graphiques gr_choosecolor p c i f Affiche le dialogue de s lection de couleur au point p de la forme lt x y gt de l cran c est une cha ne qui sera affich e dans le dialogue et f sont des triplets d entiers compris entre 0 et 65535 un triplet lt r v b gt repr sente une couleur en composantes r rouge v vert b bleu i est la couleur initiale du dialogue et doit tre connu au moment de l appel f sera unifi avec la couleur choisie Echoue si l utilisateur clique le bouton Annuler gr_pen l m gr pen l h m D finit la taille en pixels du crayon graphique et son motif l largeur h hauteur m motif 0 blanc 1 noir 2 gris 3 gris clair 4 gris fonc gr_stringwidth s n Unifie n avec la longueur de la cha ne s en fonction du jeu de caract re de la taille et du style d finis pour la fen tre graphique courante gr_mode b m D finit le mode d application du motif sur le fond pour l unit graphique courante b 0 Concerne le dessin et donc le motif du crayon b 1 Concerne le texte et donc le motif correspondant au caract re 1 La largeur n a pas d effet sous Sunview ProloglA 481 A Primitives graphiques n Il existe quatre op rations de base Copy Or Xor et Bic L op ration Copy remplace simplement les pixels de destination par les pixels du motif ou de la source dessinant sur la destination sans se pr o
394. ositionn e 1 ou 2 cette option indique si on souhaite localiser les erreurs ou les ex cutions du pr dicat pr d fini block_exit Si l option vaut 0 l ex cution de la session de d buggage ne sera pas interrompu par la d tection d erreur Si l option vaut 1 un message sera imprim indiquant le type d erreur ou l argument de block_exit et le num ro de la boite o sera r cup r e l erreur le cas ch ant Si l option vaut 2 le message pr c dent est imprim et un port EXIT est affich laissant la main l utilisateur nlrepeat valeurs 0 1 valeur par d faut 1 Quand cette option est positionn e 1 indique si l envoi d une ligne vide retour chariot seulement correspond en fait l envoi de la derni re ligne non vide contenant une ou plusieurs commandes Tr s pratique quand on a une m me suite de commande faire mais aussi tr s dangereux quand on a fait une suite de fail et qu on a oubli de taper step ou next pour avancer Si l option est 0 l envoi d une ligne vide ne fait rien warnnext valeurs 0 1 valeur par d faut 0 Quand l option vaut 1 informe le cas ch ant que les commandes nextp et nextc n ont pu tre ex cut e normalement g n ralement parce qu un backtracking se produit faisant sortir de la boite courante par le port FAIL option valeurs d faut description eprint 0 1 1 Enable disable Printing eprintport cerfRYN cerfRYN Print only specified ports unless
395. ous suffit de composer la commande suivante on suppose que est le prompt de votre syst me prolog3 Prolog imprime PROLOG III v1 2 Decembre C PrologIA 1989 90 Sur Macintosh vous devez retrouver le fichier contenant le logiciel Prolog III et l ouvrir Pour cela cliquez deux fois sur l ic ne ci contre L activation de Prolog II demande un A 2 Prolog Ill court instant Une fen tre nomm e console s ouvre dans 3 laquelle est affich un texte de la forme PROLOG III v1 2 Decembre C PrologIA 1989 90 A partir d ici le comportement de Prolog III est pratiquement le m me sur toutes les machines tout au moins pour ce qui concerne les exercices qui vont nous int resser dans ce chapitre Le caract re gt sert de prompt Prolog II et indique l utilisateur qu il est en attente d une commande Une commande peut tre aussi bien une r gle qu une requ te Donnons une requ te simple pour commencer 6 ProloglA Bulag Bulag D buter avec Prolog III gt outml Bonjour Bonjour gt 1 Prolog imprime des accolades pour exprimer que la requ te s est ex cut e avec succ s Entrons maintenant un premier petit programme les trois r gles qui expriment que Jacques Annie et R mi habitent respectivement Paris Marseille et Paris M M N OV habite_a Jacques Paris habite_a Annie Marseil
396. ow s t v rl X create window s t r1 Similaire new_window mais permet de d finir un syst me de coordonn es avec chelle 470 ProloglA Bolig Primitives graphiques rl est de la forme lt x1 y1 x2 y2 gt o x1 y1 x2 y2 sont des r els indiquant les coordonn es de la partie dessinable de la fen tre dans un cran 0 1 x 0 1 Le coin sup rieur gauche de la fen tre doit tre dans l cran donc x1 et y1 dans l intervalle 0 1 r2 est de la forme lt x1 y1 x2 y2 gt o x1 y1 x2 y2 sont des entiers de type court c est dire inf rieur 32700 d finissant un syst me de coordonn es locales l utilisateur Ce param tre n est pr ciser que pour des fen tres de type graphique GRAPHICS ou MODAL Si le param tre r2 n est pas sp cifi les coordonn es graphiques dans la fen tre seront donn es en pixels Exemple de cr ation d une fen tre gt create_window wind GRAPHICS 1 lt 0 1 0 1 0 6 0 7 gt lt 0 0 100 100 gt quelle que soit la taille de l cran un rectangle dessin par gr_rect 1 0 0 100 100 la remplira gr_moveto 50 50 positionnera au centre etc reset_window s Repositionne le pointeur de lecture au d but d une fen tre d dition de nom s Echoue si s n est pas une fen tre d dition cr e par new_window clear_window s Efface le contenu de la fen tre de nom s gr_window s La fen tre graphique s devient l unit graphique courant
397. p cification d un fichier de sortie qui remplacera l cran sp cification d un fichier de messages d erreur Par d faut le fichier utilis est le fichier prolog3 syn livr sp cification de la taille en nombre de mots de 4 octets de la pile de copie espace pour la construction des structures Valeur minimum conseill e 20 000 sp cification de la taille en nombre de mots de 4 octets de la pile de restauration ou de backtracking Valeur minimum conseill e 10 000 sp cification de la taille en nombre de mots de 4 octets de l espace des r gles Valeur minimum conseill e 80 000 sp cification de la taille en nombre de mots de 4 octets de l espace auxiliaire des alg bres Valeur minimum conseill e 200 PrologiA Bulag Bolig Utilisation de Prolog IH sur Macintosh mtaille sp cification de la taille en nombre de mots de 4 octets de la pile pour la r cup ration de m moire Valeur minimum conseill e 1000 ifaille sp cification de la taille en octets du dictionnaire interne li e au nombre de paquets de r gles Valeur minimum conseill e 35000 etaille sp cification de la taille en octets du dictionnaire externe contenant les noms de tous les identificateurs Valeur minimum conseill e 32000 q cette option supprime l affichage des avertissements et de tous les messages autres que les messages d erreur Interruption d un programme Sur Macintosh l interrupti
398. p rations de construction On trouve ainsi comme en Prolog II le constructeur d arbres mais galement deux nouveaux op rateurs le constructeur de tuple et le constructeur g n ral d arbres qui permet de d signer tout arbre de mani re totalement g n rique ind pendamment de son nombre de fils Voici les sch mas illustrant ces op rations ProloglA 71 Arbres tuples cha nes et listes Pol x x EJ TN X Xa Le constructeur d arbres Le constructeur de tuples x 1 ZX Xj si Le constructeur g n ral d arbres Le constructeur g n ral d arbres permet de repr senter tout arbre l aide seulement de son tiquette initiale et du tuple form de ses fils imm diats ATTENTION on ne peut pas ins rer d espaces entre le terme qui repr sente l tiquette de l arbre et la parenth se ouvrante du constructeur C est l l un des rares cas en Prolog I o l criture d un blanc est interdite Voici quelques exemples de l utilisation de ces divers constructeurs On donne ici plusieurs formes syntaxiques possibles qui utilisent les diff rents constructeurs et les arbres correspondants 72 PrologiA Bulag Arbres tuples cha nes et listes exemple 1 2 3 exemple FIN exemple lt 1 2 3 gt 3 lt 1 2 35 gt lt gt lt gt 1 2 3 lt gt lt 1 2 3 gt exemple lt 1 2 3 gt exemple exemple lt l
399. par des noms plus lisibles gt delayed size T N T E1 U1 N E2 U2 E2 U2 freeze bound size E1 U1 E2 U2 gt delayed size Arbrel lt 1 2 gt U N U freeze delayed size U N 2 N freeze bound size Arbrel lt 1 2 gt U N N freeze bound size U N 2 E1 U1 freeze delayed size E1l U1 E2 U2 152 ProloglA Bulag Bolig Retardements Nous pouvons d s pr sent entrer un peu plus dans le d tail En fait Prolog III effectue un traitement plus labor que ce simple retardement Voyons sur un exemple gt U N U M N M gt Si tout se passait r ellement comme nous l avons d crit pr c demment les deux contraintes de taille se contenteraient de rester gel es et l incoh rence ne pourrait en aucun cas tre d tect e rappelons encore une fois qu il ne s agit pas l de r solution mais de retardements Prolog II permet toutefois de communiquer un certain nombre d informations des arbres vers les variables num riques qui repr sentent leurs tailles Dans le sens inverse des tailles vers les arbres ceci est g n ralement beaucoup plus difficile et n est pas effectu dans la majorit des cas Examinons pour finir un exemple ou l incoh rence n est pas d tect e U N 0 lt N lt 1 U EX X De mani re triviale le syst me de contraintes donn en entr e n admet aucune solution puisque aucune valeur de N
400. particulier des fen tres de type MODAL ce qui a pour effet de rendre la saisie obligatoire dans cette fen tre Tous les effets graphiques obtenus ici doivent tre consid r s du point de vue de Prolog comme des effets de bord En particulier un objet dessin n est jamais effac au backtracking De m me la position du point d criture est une variable globale 464 ProloglA Bolig Primitives graphiques Par d faut l image bitmap d une fen tre n est pas sauvegard e ce qui veut dire que le rafra chissement n est pas assur Il est possible de le forcer par l option lt SAVE gt des primitives new_window et set_window On repr sentera un point de coordonn es d abscisse X et d ordonn e Y sous la forme d un doublet de nombres lt X Y gt De m me un rectangle sera donn sous la forme d un quadruplet de nombres lt X Y X Y gt correspondant au sch ma suivant 0 X X On repr sentera un paquet de r gles de nom Identificateur et d arit arit sous la forme d un doublet lt ldentificateur arit gt Enfin par convention les primitives qui n ont d effet que dans une fen tre graphiques sont pr fix es par gr_ Ces r gles utilisent directement les proc dures du syst me graphique de la machine sous jacente Un signe dans la marge indique une primitive ou une caract ristique sp cifique au Macintosh Vous ne devez pas l utiliser si vous d sirez porter vos programmes su
401. ples gt pgcd 24 16 P gt pgcd 24 16 P P Voir galement e ocd e ppcm lcm 316 ProloglA A gt 2 L2 bd L a R gles pr d finies et proc dures externes ppcm N1 N2 N3 Fonction Calcul du plus petit commun multiple Classe R gle pr d finie Prolog III Cat gorie Contraintes num riques Param tres connus N1 N2 Messages d erreur Non Description Pose la contrainte N3 N3 o N3 est le plus petit commun multiple des entiers N1 et N2 ppcm choue si N1 et N2 ne sont pas connus ou pas entiers Exemples gt ppcm 12 18 P 36 gt ppcm 12 18 P 36 Voir galement e Icm e pgcd gcd ProloglA 317 2 gens 2 Bol R gles pr d finies et proc dures externes L predefined T Fonction Teste si le terme T est une r gle pr d finie ou un pr dicat valuable Classe R gle pr d finie Prolog MI I Cat gorie Contr le Param tres connus T Messages d erreur Non Description S efface avec succ s si T est un terme correspondant l appel d une r gle pr d finie ou un pr dicat valuable Exemples predefined list predefined predefined Ul U tuple U 1 predefined myrule 318 ProloglA Bolig R gles pr d finies et proc dures externes prologlIl Fonction Bascule en syntaxe Prolog III Classe Proc dure externe Prolog II Cat gorie Envi
402. pointeur p lt 100 empile v gt outml d bordement de la pile fail depile v gt dec pointeur val pointeur p val pile p v dec pointeur p gt 1 de depile v gt outml pile vide assign pointeur 1 fail gt initialise gt empile 111 gt empile 222 gt depile x depile y 174 PrologiA Bolig L environnement x 222 y 111 gt depile x pile vide gt 3 Structuration saisie et modification des r gles Tous les exemples que nous avons examin jusqu pr sent taient de petits programmes Prolog III dans lesquels le nombre des identificateurs restait tr s limit et facile appr hender par le programmeur Dans de telles circonstances on peut supposer que les identificateurs en pr sence appartiennent un unique univers qui les contient tous c est ce que nous avons fait faute d indication contraire Tant que les programmes restent de taille raisonnable la n cessit de regrouper les identificateurs et les r gles dans des ensembles fonctionnels ne se manifeste pas La situation n est plus la m me d s qu on consid re de gros programmes suffisamment complexes pour n cessiter une d composition en modules de fonctionnalit s diff rentes ou encore des programmes m me relativement simples qui comportent un nombre important d identificateurs qu ils soient ou non des noms de r gles Appara t alors tr
403. pond Echoue si les arguments sont inconnus ou de mauvais type Exemples essayons l gt essayons 2 gt essayons 1 2 gt essayons X essayons Y Z Y 1 Z 2 TE EAE suppress essayons 1 2 essayons X essayons Y Z FOR x Vent resr2 ProloglA 359 R gles pr d finies et proc dures externes suspend_trace Fonction Annule la trace si celle ci est active Classe Proc dure externe Prolog M I Cat gorie Environnement Param tres connus Aucun Messages d erreur Non Description Annule la trace si celle ci est active jusqu au prochain resume_trace La r union de ces deux primitives est extr mement utile lorsque l on d sire supprimer la trace de certains pr dicats particuliers Il suffit alors d encadrer ces pr dicats par les primitives suspend_trace et resume_trace Si aucune trace n est active les appels suspend_trace et resume_trace n ont pas d effets particuliers Exemples gt essai gt suspend trace outml sans trace resume trace gt trace line essai line line essai essai suspend trace sans trace line gt no trace no trace gt essai sans trace gt Voir galement e trace no_trace set_config resume_trace 360 ProloglA Bulag Bola 2 2 2 s R gles pr d finies et proc dures externes sys_command S Fonction Ex cution d une commande du syst me d expl
404. ppropri es Exemple assign Geneva 3 assign litalic l assign Relief 3 gr_ text Geneva 18 Italic Relief l output graphic outm Hello output console affiche Hello dans la fen tre graphique gr_font f Charge la fonte de nom f pour la fen tre graphique courante La fonte de base est courier les fontes propos es sont des variations sur la hauteur et l paisseur des caract res ft7r ft12r ft12b ft14r ft14b ft19r 7 12 14 et 19 d signe la taille de la fonte r repr sente une paisseur standard et b une plus grande paisseur PrologIA 483 ralo Primitives graphiques a Exemple gt gr_font ft12r 6 Primitives sp ciales de lecture et d criture au clavier et la souris Simulation de boutons gr_draw_buttons b Dessine un ou plusieurs boutons dans la fen tre graphique courante La d finition d un bouton est donn e par une r gle Prolog II de nom b et d arit 3 Les 3 arguments sont respectivement le rectangle dans lequel il s inscrit la cha ne affich e par le bouton un terme permettant de coder une information suppl mentaire par exemple une action associer ce bouton Tous les boutons d finis par le paquet lt b 3 gt sont dessin s Exemple de base de donn es de boutons wtButton lt 5 160 50 175 gt Edit edit wtButton lt 5 180 50 195 gt Set 484 ProloglA Bolig Primitiv
405. pr d fini peut ensuite interpr ter cet arbre et en extraire le nombre 5 mais cela est tranger au c ur de Prolog II qui n effectue aucun traitement sp cifique des bool ens ou des nombres Dans le jargon math matique une op ration est donc une application f D D avec D C D 28 ProloglA Bulag Bolig Concepts de base En Prolog II au contraire les op rations bool ennes et arithm tiques sont connues en tant que telles du c ur du langage qui leur donne leur signification logique ou arithm tique habituelle Il en d coule que l arbre repr sent par la formule 2 3 n est autre que la feuille r duite au nombre 5 r sultat de l op ration indiqu e Cette remarque aura encore plus d int r t quand nous consid rerons les termes avec des variables Comme pour l addition pr c dente la formule 2 x ne d signera pas un quelconque arbre non atomique mais bel et bien le nombre inconnu r sultat de l addition de 2 et du nombre inconnu x Op rations bool ennes Les op rations bool ennes ne sont d finies que si les op randes sont des valeurs bool ennes c est dire des feuilles tiquet es par des constantes bool ennes 1 L op ration unaire non al gt 4 2 L op ration binaire et a1 42 41 amp a2 3 L op ration binaire ou non exclusif a1 42 41 a2 4 L op ration binaire implique a1 42 gt a1 gt 42 5 L op ration binaire quivalent
406. pr senteront des arbres correspondant des rectangles c est dire de la forme lt x1 71 x2 y2 gt 478 ProloglA Bolig Primitives graphiques gr_click b x y Teste si un bouton de la souris a t press depuis le dernier appel de gr_erase ou gr_click Si c est le cas x et y sont unifi s avec les coordonn es enti res du point o se trouvait la souris lorsque cet v nement appel clic s est produit Sinon agit en fonction de b entier qui doit tre connu au moment de l appel La signification des valeurs de b est la suivante b 1 Attendre qu un nouveau clic se produise dans la fen tre graphique courante b 0 Ne pas attendre et r aliser un backtracking s il n y a aucun clic en attente gr_click b x y m Identique gr_click b x y mais donne en plus l tat des principales touches de modification en unifiant m avec la somme des valeurs suivantes 1 La touche SHIFT est appuy e 2 La touche CONTROLE est appuy e 4 La touche OPTION est appuy e 8 La touche COMMANDE est appuy e La touche MAJUSCULE VERROUILLEE est enfonc e Si m 0 aucune touche de modification n est appuy e durant le clic 1 Cette touche est absente sur le clavier du Macintosh ProloglA 479 Primitives graphiques gr_getmouse x y gr_getmouse x y b Donne la position actuelle de la souris dans la fen tre graphique courante en coordonn es enti res relatives l origine de la fen
407. pression cela consiste modifier ou restreindre les deux choix pr c dents La mani re dont Prolog fait ces choix peut amener certains programmes boucler et par cons quent ne pas se comporter comme on pouvait l esp rer Les deux exemples suivants illustrent ce ph nom ne Exemple 1 Un cas typique est celui de la transitivit Quand on cherche effacer plus_grand Jo x en utilisant le programme suivant on retrouve une instance de ce m me but effacer Le programme se met alors boucler et se termine par un d bordement de pile ou par une interruption utilisateur gt insert plus grand Jo Max gt plus grand Max Fred gt plus grand x y gt plus grand x z plus grandi z y gt plus grand Jo x x Max x Fred 162 ProloglA Bolig L environnement DEBORDEMENT gt La mani re correcte d crire ce programme consiste enlever la r cursivit gauche gt insert plus_grand Jo Max plus grand Max Fred plus grand x z gt plus_grand x y plus grand ou egal x x plus grand ou egal x y 0 gt plus grand Jo x Max Fred x x gt gt plus grand ou egal y z 52 gt plus grand x y Exemple 2 Cet exemple num re toutes les listes construites avec 1 Avec le mauvais programme ci dessous c est d abord la liste infinie qui devrait tre produite gt
408. printat has been used ebreak 0 1 1 Enable disable Breaks not Nexts ebreakport cerfRYN cerfRYN Break and Next only at these ports 1 Les commandes fail et FAIL ne sont pas active ce port particulier ProloglA 2025 Outils de mise au point emaxlevel gt 1 1 all Max level of full printing emaxarg gt 1 1 all Max number of arguments printed emaxexpr gt 1 1 all Max number of monomials printed emaxstr gt 1 1 all Max number of characters printed etracemode 1 2 3 2 Printing mode for goals and terms eecho 0 1 0 Echo DBG commands before executing eprompt lt 19chars DBG Dbg prompt string ecatcherror 0 2 2 0 ignore 1 print error 2 print and catch will print an FXIT port enlrepeat 0 1 1 if set lt CR gt performs the previous command line ewarnnext 0 1 0 Warns when nextc or nextp can t be done set tous ports SYNTAXE set nom set nom valeur DESCRIPTION Donne la valeur valeur l option nom parmi celles qui sont d crites plus haut La forme deux arguments positionne l option sa valeur par d faut show tous ports SYNTAXE show show nom DESCRIPTION La forme un argument imprime la liste de toutes les options et leurs valeurs dans un format r utilisable La forme deux arguments permet de n avoir que l information concernant l option nom no_debug tous ports 2026 ProloglA Bolig Outils de mise
409. prit le d roulement d un programme Prolog IIT ne vise pas modifier les valeurs des variables mais les d terminer D s leur entr e en sc ne les variables pourront appara tre dans des termes et des contraintes comme x lt 10 justement programmer en Prolog III ne sera parfois rien d autre qu crire les contraintes qui p sent sur un arbre initialement inconnu repr sent par une variable Le travail de Prolog IIT sera alors de r soudre ces contraintes et de d voiler l arbre en question 5 Termes Ayant introduit les constantes les op rations et les variables nous disposons de tout ce qu il nous faut pour d finir les termes dans toute leur g n ralit Comme nous l avons dit les termes sont les formules qui repr sentent les arbres dans les programmes Voici les plus significatives parmi les expressions BNF qui d finissent la syn taxe des termes La totalit de ces expressions est donn e au chapitre Les syntaxes de Prolog II Syntaxe lt terme gt lt terme 1 gt lt terme gt gt lt terme gt x lt terme gt lt gt lt terme gt lt terme 1 gt z lt terme2 gt x lt terme2 gt lt terme2 gt lt terme gt lt terme2 gt lt termej gt lt terme2 gt lt termej gt lt terme2 gt ProloglA 35 Concepts de base 36 lt terme2 gt lt terme3 gt lt terme2 gt lt terme3 gt lt terme2 gt lt terme3 gt lt multiplicande gt lt
410. proc dures externes mult R1 R2 R3 pose la contrainte R3 R1 R2 avec les retardements n cessaires s il y a lieu bound mult Rl R2 R3 pose la contrainte R3 R1 R2 la condition que la valeur de R1 ou celle de r2 soit connue choue dans le cas contraire V rifications de types integer I v rifie que le terme 1 repr sente une valeur enti re connue num R v rifie que le terme R repr sente une valeur num rique connue rational R v rifie que le terme R repr sente une valeur num rique rationnelle connue real R v rifie que le terme R repr sente une valeur num rique cod e en flottant connue ProloglA 105 Les contraintes num riques is num T v rifie que le terme T est astreint repr senter une valeur num rique ou que la contrainte T num appartient au syst me courant de contraintes Divers trunc R N pose la contrainte N R o R est la partie enti re du nombre r Echoue si R n est pas une valeur num rique connue div Ni N2 N3 pose la contrainte N3 E o E est le r sultat de la division enti re de N1 par N2 Seules les valeurs absolues de n1 et N2 sont prises en compte pour le calcul de x Echoue si n1 et n2 ne sont pas tous les deux des valeurs enti res connues mod N1 N2 N3 pose la contrainte N3 R o R est le reste de la division enti re de N1 par N2 Seules les valeurs absolues de n1 et N2 sont prises en compte pour le calcul de r Echoue si n
411. que l on a en t te sans laisser la porte ouverte aux erreurs qu elles soient conceptuelles ou bien de simples fautes de frappe Ce chapitre d crit les outils de mise au point mis la disposition des programmeurs On verra galement que ces outils permettent plus que la simple correction d erreur puisque le suivi d ex cution d un programme permet d am liorer voire de saisir le comportement de l algorithme programm Novembre 1991 ProloglA Outils de mise au point 1 Introduction Les fautes qui ne provoquent pas d erreur de syntaxe peuvent tre class es dans deux cat gories e Celles qui sont d tectables statiquement c est a dire en examinant l ensemble des r gles courantes que le programme est susceptible d utiliser Le cas le plus fr quent est l appel une r gle non d finie On utilisera l outil XRef pour v rifier qu un programme ne contient pas un moment donn de tels appels e Celles qui n cessitent l ex cution du programme Le couple identificateur arit identifie un paquet de r gles Faute de frappe dans un identificateur faute d inattention lorsqu on appelle une r gle form e d un ident Une des premi res sources d erreur est l appel de r gles non d finies ou du moins pas encore d finies au moment de l appel dans le cas ou on utilise l insertion dynamique de r gles par les primitives assert insert reload Ici non d finies d signe aussi bien un bon identifica
412. r click Termeldentifiant Etat Rectangle PointCliqu Demande de r aliser l action associ e un clic sur l item PointCliqu est de la forme lt x y m gt voir lt gr_click 4 gt Le r sultat est un doublet lt NouvelEtat Terminaison gt o NouvelEtat remplacera le champ Etat du userltem Terminaison sera de la forme lt gt Si aucune interaction n a t faite avec l utilisateur lt n gt Si la r gle g re une boucle locale de traitement de l item et que l interaction se termine par un caract re RC n 0 ou TAB n 2 ou un clic non lu n 1 lt X y m gt Sila r gle g re une boucle locale de traitement de l item et que l interaction se termine par un clic situ l ext rieur du rectangle de l item Si l tat de l item change il doit tre redessin avant la terminaison edit Termeldentifiant Etat Rectangle Demande de saisie de caract res dans l item Le r sultat sera de la m me forme que ci dessus 510 ProloglA Bolig A e e o Primitives graphiques extract Termeldentifiant Etat Demande d extraction de la valeur courante de l item pour former le couple Termeldentifiant Valeur qui est fourni en sortie ou pass aux items avec des actions sur le dialogue button2 par exemple Si la requ te choue on suppose qu il n y a pas de r sultat associer l item Sinon le r sultat doit tre la partie valeur Exemple de cr ation d un item faisant d filer lorsqu on cliqu
413. r d finies et proc dures externes enum R R1 Fonction Enum ration enti re born e sup rieurement Classe Proc dure externe Prolog M II Cat gorie Contraintes num riques Param tres connus R1 Messages d erreur Non Description Enum re toutes les constantes enti res n positives telles que l ensemble de contraintes R n 1 lt R lt R1 soit satisfaisable L ordre d num ration est ind fini enum R R1 R2 Fonction Enum ration enti re entre deux bornes Classe Proc dure externe Prolog M II Cat gorie Contraintes num riques Param tres connus R1 et R2 Messages d erreur Non Description Enum re toutes les constantes enti res n positives telles que l ensemble de contraintes R n 1 lt R1 lt R lt R soit satisfaisable L ordre d num ration est ind fini ProloglA 245 R gles pr d finies et proc dures externes eq T1 T2 Fonction Egalit Classe Proc dure externe Prolog M M Cat gorie Contr le Param tres connus Aucun Messages d erreur Non Description Pose tout simplement la contrainte T1 T2 Voir galement e dif 246 ProloglA Bolig Bolig R gles pr d finies et proc dures externes exit Fonction Terminaison de Prolog III Classe Proc dure externe Prolog M I Cat gorie Environnement Param tres connus Aucun Messages d erreur Non Description Permet de sort
414. r d finies externes crites dans n importe quel langage de programmation D cembre 1990 Pri ologlA Utilisation de Prolog III sur Macintosh 1 Installation de Prolog Ill Ce paragraphe d crit la proc dure d installation du logiciel Prolog III sur Apple Macintosh Il est recommand de le lire en entier avant de commencer l installation Mat riel et logiciel requis Prolog II est disponible sur toute la gamme Macintosh du Mac Plus au Mac IT Il faut au minimum 2 5 Mol de m moire vive 4 Mo ou plus sont souha itables pour une utilisation confortable Prolog III est compatible avec MultiFinder et peut fonctionner en t che de fond Bien qu il ne soit pas impossible de travailler avec deux disquettes un disque dur est fortement conseill Pour ajouter Prolog II des r gles pr d finies implant es par des sous programmes externes vous aurez besoin en outre de l environnement de programmation MPW Version 2 d Apple avec le compilateur C et les logiciels et biblioth ques qui lui sont associ s ou bien le compilateur de tout autre langage compatible avec MPW C c est dire permettant les appels inter langages de sous programmes Ici la taille des fichiers objets et de l application construire impose la pr sence d un disque dur Contenu du kit d installation Le kit de distribution de Prolog III se compose de trois disquettes de 800 Ko Les disque 1 et disque 2 contiennent surtout les fichi
415. r I et P une cha ne compos e des caract res formant le pr fixe de l identificateur I e Si S et P sont connus pose l ensemble de contraintes I 1 o l est un identificateur compos des caract res de la cha ne repr sentant son pr fixe Exemples gt P et de celle repr sentant sa notation abr g e S string ident P S histoire valmy P histoire S valmy string ident histoire valmy I I histoire valmy string ident geographie fleuve Seine I g_ I geographie fleuve Seine string ident geographie fleuve Seine I g_ g PrologIA 353 2 gens 2 Bol R gles pr d finies et proc dures externes L string_integer S N Fonction Conversion d une cha ne en un entier Classe R gle pr d finie Prolog MI I Cat gorie Conversions Param tres connus Voir ci apr s Messages d erreur Entier attendu Description e Si S est connu pose l ensemble de contraintes I S o S est un entier form partir des caract res de la cha ne S e Si N est connu pose l ensemble de contraintes S N o N est une cha ne form e des caract res qui composent l entier N Exemples string integer 12 N 12 string integer s 24 2 S 12 gt string integer 12 3 N Erreur 234 entier attendu gt 354 ProloglA Bolig R gles pr d finies et proc dures externes string_r
416. r d autres machines Un signe X dans la marge indique une primitive ou une caract ristique sp cifique l environnement XWindows ou SunView 1 Il est possible d utiliser la forme lt X Y gt lt X Y gt pour repr senter un rectangle ce terme est une paire point e de doublets repr sentant deux des points du rectangle L emploi de cette forme obsol te n est pas conseill e ProloglA 465 Primitives graphiques Les descriptions des diff rents environnements ont t regroup es dans un seul document pour mettre en vidence les diff rences qui existent encore entre ces environnements 2 Primitives de gestion des fen tres file window s1 file window s1 s2 Cr e si elle n existe pas d j une fen tre de nom s2 initialis e avec le texte contenu dans le fichier de nom s1 file_window s1 quivaut file_window s1 s1 front window s Unifie s avec le nom de la fen tre se trouvant au premier plan get_screen x y get_screen x y N Unifie x et y respectivement avec la largeur et la hauteur de l cran en pixels Dans la forme trois arguments N est unifi avec 1 si l cran ne poss de que deux couleurs noir et blanc un nombre sup rieur 1 sinon get_window s b x1 y1 x2 y2 get_window s b Unifie successivement par backtracking les param tres s b x1 y1 x2 y2 avec les valeurs correspondantes chacune des fen tres existantes Voir set_window pour la signification
417. r son pesant d or gt gt paq r ProloglA 145 Les contraintes bool ennes Pelay Cette fois ci la contrainte fournie en r ponse exprime le fait que si l on sait garder un secret et que l on est apte tre d put alors on vaut son pesant d or ststs 146 ProloglA Bolig Retardements 1 Introduction 2 Termes connus Les pr dicats valuables known bound et free 3 Retardement de l ex cution d un but 4 Contraintes retard es Tailles retard es Concat nation retard e Contraintes num riques retard es Que trouve t on dans ce chapitre On retrouve en Prolog II le concept de retardement de l ex cution d un but La compr hension de ce processus demande que l on s attarde un peu sur la signification pr cise de ce qu est une variable connue De plus un processus complexe de retardement de contraintes s applique lorsque les restrictions de base sur la taille des arbres la concat nation des tuples ou la lin arit des expressions num riques ne sont pas explicitement respect es L utilisation de ce processus de retardement de contraintes est un exercice qui peut s av rer tout fait p rilleux et nous essayerons dans ce chapitre d en donner une explication d taill e 1 introduction Comme Prolog II et Prolog II Prolog III permet de retarder l ex cution d un but en attendant qu un terme soit connu La compr hension de ce D cembre 1990 Pr ologlA Ret
418. raie On peut pr sent donner les requ tes suivantes gt ChatsOiseaux c o 14 5 c 2 o 3 gt ChatsOiseaux 1 0 p 5 o 4 p 12 gt ChatsOiseaux 1 1 2 4 gt ChatsOiseaux c o 6 4 c 1 o 5 gt e r Prolog ne r pond rien la troisi me requ te car elle n est pas soluble A la quatri me une des variables de la solution est n gative En effet lors de la formalisation de notre probl me nous n avons aucun moment pr cis que les solutions devaient tre positives Nous allons donc r crire la relation ChatsOiseaux en imposant aux variables figurant dans le syst me d quations de ne pas tre n gatives Auparavant nous enlevons la relation ChatsOiseaux en donnant la requ te gt suppress ChatsOiseaux gt r puis nous crivons la nouvelle relation gt ChatsOiseaux c o p t t c o p 4c 20 c gt 0 Se o gt 0 p gt 0 t gt 0 et nous demandons gt ChatsOiseaux c o 6 4 gt Prolog nous dit qu il n y a pas de solution cette requ te ce que nous voulions Mais que se passe t il si nous fournissons un nombre de pattes et de t tes tels qu il n existe pas de solution enti re gt ChatsOiseaux c o 7 3 ProloglA 15 D buter avec Prolog III c 1 2 o 5 2 gt nous nous retrouvons avec chat et gt d oiseaux Nous n avio
419. raintes bool ennes 122 enter 1010 entr e sorties 192 entree log 1006 enum 104 244 epsilon_float 342 eq 246 eql 171 369 escape 431 espace du code faille 1009 espace principal taille 1009 espace secondaire taille 1009 espacement horizontal 505 espacement vertical 504 et 29 119 ex cution d un programme 64 exemples arbres 71 caract res 40 cha nes 41 constructeurs 73 contraintes 56 contraintes bool ennes 122 contraintes num riques 101 contraintes sur les arbres 74 contraintes sur les cha nes 85 contraintes sur les tuples 78 entiers 39 expressions bool ennes 43 120 expressions num riques 42 99 flottants 40 freeze 149 identificateurs 38 listes 84 modules 186 r gles 61 requ tes 61 termes 38 45 utilisation de la coupure 164 exemples de programmes additionneur binaire 135 au plus un vrai 131 calcul bancaire 108 calcul des feuilles 87 ChatsOiseaux 15 communications Prolog I C 1022 crible d Eratosth ne 90 element_de 13 K l ments vrais 133 naive reverse 82 puzzle logique 143 quick sort 87 remplissage d un rectangle 110 RepasLeger 9 SEND MORE MONEY 109 suite p riodique 89 PrologiA 1035 Index G n ral Pely un ou sur 2 variables 129 un ou sur une liste 130 exit 198 247 exp 172 370 expressions bool ennes 43 119 437 num riques 42 97 436 maximum 105 minimum 105 pr dicat val 168 F fail 249 faits vrais 62 famille 178 partie ferm e 178 Fdecimal 108
420. rappe de caract res requ te edit e l information retourn e au gestionnaire de dialogue en cas d activation de cet item par un clic ou une dition requ te extract La sensibilit de l item est d finie de la fa on suivante Sensibilit Requ te 0 size draw 1 size draw clic extract 2 size draw clic edit extract L tat d un user_item est un terme structur par l utilisateur selon ses besoins userltem Termeldentifiant IdentificateurdeR gle Etat Sensibilit Au moment de l appel le premier argument de la r gle lt ldentificateurdeR gle 2 gt contient la requ te avec les param tres pertinents extraits de l item et le deuxi me argument est une variable libre qui devra tre instanci e avec le r sultat de la requ te Si la r gle choue l op ration est ignor e ProloglA 509 Primitives graphiques Description de chacune des requ tes size Termeldentifiant Etat Demande de calcul de la taille de l item lors de l initialisation du dialogue Le r sultat doit tre un doublet lt dx dy gt en nombre de pixels draw Termeldentifiant Etat Rectangle Actif Demande de dessin de l item Termeldentifiant dans le rectangle Rectangle de la forme lt x1 y1 x2 y2 gt avec la description d tat Etat et situ dans un groupe activ si Actif est 1 d sactiv si Actif est 0 il est conseill de ne pas montrer les valeurs de champ dans les zones d sactiv es Le r sultat est igno
421. ration binaire de construction g n rale d arbre a1 a2 gt a1 a2 Cette op ration n est d finie que si a1 est une feuille et 42 un tuple Elle a pour r sultat l arbre qui a aq pour tiquette et 42 pour suite de fils Par d finition on a donc l galit a1 lt b bm gt a b bm 4 L op ration binaire de concat nation de tuples a1 a2 gt a a2 Elle n est d finie que si a1 et a2 sont tous les deux des tuples Elle a pour r sultat le tuple dont les l ments sont ceux de 41 suivis de ceux de 42 Par d finition on a donc l galit lt b1 ie bm gt lt C1 Ck gt lt b1 AE bm CT Ck gt 32 ProloglA Prelog Concepts de base Les listes classiques On peut aussi utiliser en Prolog II des listes classiques bas es sur la notion de paire point e comme elles existent en Lisp ou dans d autres Prolog Dans la syntaxe d Edimbourg ces listes s crivent de la mani re suivante o liste vide e liste ayant les l ments e1 e2 en et termin e par e1 e2 en e liste ayant en t te les l ments e1 e2 e et pour queue la liste q Le1 e2 en gq Il faut bien comprendre que ceci n est pas une op ration de construction d arbres sp cifiquement prise en compte par Prolog II mais uniquement un autre moyen syntaxique d exprimer certains arbres la paire point e et le c l bre nil A cet effet on donne un statut d identificateur au do
422. ratique il nous arrivera de dire qu elle est vraie ou fausse Mais il ne s agit pas l des valeurs bool ennes du domaine de Prolog III o et1 Une contrainte n est pas un terme et ne peut pas tre vue comme exprimant une op ration 44 PrologIA Bulag Bolig Concepts de base Autres termes mesure pierre lt 180 100 metres gt 1 1 mesure lt pierre lt 180 100 metres gt 1 gt 2 lt mesure pierre lt 180 100 metres gt 1 gt 3 lt gt mesure pierre lt 180 100 metres gt 1 4 4 X Y 5 4z y caractere c caractere c 6 On notera qu en Prolog II les termes 1 et 3 ne sont pas quivalents En revanche 1 et 2 le sont ainsi que 3 et 4 L exemple 5 montre un terme correct qui n est pas le nombre 4 x x y mais l arbre ayant 4 pour tiquette et le nombre x y pour unique fils On notera aussi que l tiquette du dernier exemple a d tre parenth s e Termes incorrects triplette X Y Z 1 ff X Y Z T 2 uneFeuille 3 L exemple 1 rappelle un des rares endroits o la syntaxe ne tol re pas l insertion d un blanc entre l tiquette d un arbre et la parenth ses ouvrante qui pr c de les fils Du seul point de vue de la syntaxe l exemple 2 pourrait tre corrig en l crivant f X Y Z T Mais ce terme serait alors s mantiquement incorrect puisque l tiquette d un arbre doit tre une feuille 1 Puisqu il ne s ag
423. re Classe Proc dure externe Prolog II Cat gorie Contraintes num riques Param tres connus Aucun Messages d erreur Non Description Pose la contrainte R2 R1 o R1 est une valeur quelconque du terme R1 qui satisfait l ensemble de contraintes courant Exemples gt particular value X Y x lt 9 x gt 9 particular value x Y X lt 9 9 S 1 8 1 gt 0 9 gt particular value x X Xx lt 9 gt Remarques Deux cas peuvent se pr senter e Soit la valeur de R1 qui satisfait le syst me de contraintes courant est unique R2 repr sente alors cette valeur e Soit l ensemble des valeurs possibles qui satisfont le syst me de contraintes courant est infini La valeur particuli re choisie est alors ind pendante de la contrainte et des contraintes d in galit s strictes On est cependant assur qu une valeur tr s proche de celle exhib e existe ProloglA 315 2 gens 2 Boli R gles pr d finies et proc dures externes L pgcd N1 N2 N3 Fonction Calcul du plus grand commun diviseur Classe R gle pr d finie Prolog II Cat gorie Contraintes num riques Param tres connus N1 N2 Messages d erreur Non Description Pose la contrainte N3 N3 o N3 est le plus grand commun diviseur des entiers N1 et N2 Le plus grand commun diviseur calcul ne tient pas compte du signe pgcd choue si N1 et N2 ne sont pas connus ou pas entiers Exem
424. rent_predicate 336 ProloglA Bolig R gles pr d finies et proc dures externes save Fonction Sauvegarde de modules Classe R gle pr d finie Prolog MI Cat gorie Environnement Param tres connus Aucun Messages d erreur Non Description Sauvegarde de modules Cette commande produit la sauvegarde dans le fichier de nom prolog3 psv de tous les l ments r gles variables statiques et tableaux de tous les modules Remarque Le fichier produit est un fichier de code objet destin tre ult rieurement charg dans un autre environnement Prolog II au moyen de la commande reload Voir galement e reload e exit quit ProloglA 337 2 gens 2 Bol R gles pr d finies et proc dures externes L save S Fonction Sauvegarde de modules Classe R gle pr d finie Prolog MI Cat gorie Environnement Param tres connus O Messages d erreur Cha ne attendue Description Sauvegarde de modules Cette commande produit la sauvegarde dans le fichier de nom S cha ne de caract res de tous les l ments r gles variables statiques et tableaux de tous les modules Remarque Le fichier produit est un fichier de code objet destin tre ult rieurement charg dans un autre environnement Prolog au moyen de la commande reload Voir galement e reload e exit quit 338 ProloglA Bolig R gles pr d finies et proc dures externes
425. res r els ou rationnels en pr cision parfaite de traiter des formules en logique propositionnelle compl te et de r soudre un certain nombre de contraintes portant sur les arbres et les listes Ce remaniement profond et la puissance qui en d coule ne sont cepen dant pas gratuits Le c ur de l interpr te est cinquante fois plus gros que celui de Prolog II et le pari de s attaquer des probl mes exponentiels comme le traitement de l alg bre de Boole ou la simplification de syst mes d quations lin aires am ne parfois des d convenues du point de vue des temps d ex cutions Il faut donc rester conscient du fait que la puissance d expression du langage voile parfois la complexit de la r solution qui en d coule ProloglA Terminons ce premier contact en esp rant que vous appr cierez la programmation en Prolog III et que vous serez aid s en cela par ce manuel Nous avons tent d y d crire mais surtout de commenter et d expliquer les nombreuses notions nouvelles qui font de Prolog II un langage qui se d marque fondamentalement des autres Prolog Ce souci de produire un discours la fois pr cis dans les fonctionnalit s et didactique dans les concepts nous conduit de fait consid rer ce manuel comme une premi re tape Et il nous appara t vident que seuls votre aide vos remarques et vos critiques nous permettrons de r ellement faire voluer cette documentation vers un outil dont l ambition est de vous a
426. riable 37 syntaxe 435 447 450 t te de r gle 60 told 405 trace 340 362 trace_file 363 true 406 trunc 106 172 364 369 TTY 467 489 tty_wrap 342 tuple 81 365 tuples 12 22 71 76 U undef_array 366 undefined_rule 343 error 343 fail 343 warning 343 unit s d entr e sortie 192 user_item 510 userltem 510 V val 169 367 abs 369 add 368 atan 370 cos 370 div 368 eql 369 exp 370 if 369 inf 369 infe 369 In 370 mod 369 mul 368 rad 370 sin 370 sqrt 370 sub 368 sup 369 supe 369 tan 370 trunc 369 valeurs bool ennes 25 var 407 variables 34 d carts 104 syntaxe 433 443 W window 497 write 408 writeq 409 PrologiA 555 LISE PITA T HERITAGE Prolog III Version 1 3 Manuel d Utilisation Macintosh PrologilA Garantie et responsabilit s ProloglA n offre aucune garantie expresse ou tacite concernant ce manuel ou le logiciel qui y est d crit ses qualit s ses performances ou sa capacit satisfaire quelque application que ce soit ProloglA ne pourra tre tenue responsable des pr judices directs ou indirects de quelque nature que ce soit r sultant d une imperfection dans le programme ou le manuel m me si elle a t avis e de la possibilit que de tels pr judices se produisent En particulier elle ne pourra encourir aucune responsabilit du fait des donn es m moris es ou exploit es y compris pour les co ts de r cup ration o
427. rieur d une variable ou d une constante Prolog IA 457 Syntaxes De m me espace peut tre enlev de partout sauf l int rieur d une constante et aux endroits o son retrait provoque la fusion de deux unit s lexicales en une seule probl me typique des op rateurs Un espace doit suivre imp rativement le caract re point de fin de r gle ou de requ te C est ainsi qu on distingue ce point final de celui de la concat nation Continuation de ligne La s quence lt retour chariot gt est compl tement ignor e pendant la lecture de terme et de r gles Cela r soud des probl mes d affichage chaine ou nombre trop long Par exemple regle 123456 78912 gt le 7 tant bien en d but de la seconde ligne est la m me chose que regle 12345678912 gt Les diff rents commentaires Un commentaire est une suite de caract res parenth s s par les groupements particuliers et Il peut appara tre partout o un caract re espace serait non significatif On peut aussi parenth ser les commentaires l aide de groupements form s par la r p tition de pour l ouverture et de pour la fermeture avec un m me facteur de r p tition Ceci permet d embo ter les commentaires Voici des exemples ceci est un commentaire tenant sur deux lignes le texte commentaire est inclus Un autre type de commentaire est celui introduit par le caract re et qui
428. ring copie cette cha ne de caract res dans la m moire de travail de Prolog avant d unifier la valeur avec l argument de la r gle externe err est une variable positionn e 1 si une erreur s est produite ou si un backtracking a t g n r Le programme externe n est pas autoris r cup rer ce type d erreur Pour un comportement correct du syst me de gestion des erreurs on doit imm diatement sortir du programme externe si err est non nulle put_integer no_arg value err Unifie l argument de rang no_arg avec l entier contenu dans value put_real no_arg value err Unifie l argument de rang no_arg avec le flottant contenu dans value put_string no_arg value err Copie la cha ne de caract res point e par value dans la m moire de travail de Prolog et l unifie avec l argument de rang no_arg Noter qu un caract re nul doit indiquer la fin de la cha ne originale Ces trois fonctions retournent une valeur qui est l oppos e en tant que valeur bool enne de l argument err Ainsi on peut consid rer que la fonction est valu e TRUE lorsqu il n y a pas eu d erreur FALSE lorsqu une erreur s est produite Cela rend quivalentes les deux formes d appel suivantes put_integer n v err if err return et if put_integer n v err return ProloglA 1021 Utilisation de Prolog III sur Macintosh Un exemple complet Voici un exemple complet d crivant l ensemble des op rations ex
429. ringwidth 482 gr_text 483 gr_window 472 gr_window_is 472 GRAPHICS 467 groupe 500 gtty 489 ident 260 identificateurs 24 433 444 abr g s 177 syntaxe 177 434 444 complets 177 s parateur 177 syntaxe 177 434 444 if 172 369 implique op ration 29 119 implique relation 52 120 in_char 193 261 in_char 262 in_ident 263 in_integer 264 in_real 265 in_sentence 194 266 in_sentence 267 in_string 268 in_term 269 in galit 50 101 in quations num riques 104 inf 171 369 infe 171 369 inf rieur ou gal 101 inf rieur strict 101 initial3 psv 1004 inl 270 input 8 194 271 516 input_is 272 insert 188 189 273 installation 1002 installation de Prolog III 1002 integer 106 275 interruption 167 1008 d un programme 1007 is 389 is_bool 129 276 is_char 277 is_ident 278 is_leaf 279 is_num 106 280 is_tuple 81 281 is_univ 282 item coch 494 J jeu de caract res 427 K kill_button 515 kill_module 12 191 283 kill_window 472 kit de distribution 1002 known 148 284 known_part 81 152 285 L lcm 286 ligne de texte ditable 501 ligne de texte non ditable 500 line 197 287 linefeed 431 list 7 9 11 189 288 list_string 86 293 list_tuple 84 294 PrologiA 1037 Index G n ral Pely liste vide 84 syntaxe 429 listes 33 83 listing 390 litt ral 124 In 172 370 load_graphic 464 MacDraw 516 machine Prolog II 65 162 MacPaint 51
430. rint s r_x r_y x0 y0 gr_print s r1 r2 Imprime le contenu de la fen tre graphique s On peut sp cifier gr ce la troisi me forme la zone imprimer qui est le contenu du rectangle r1 le r sultat sur papier se situant dans le rectangle r2 Les r ductions et translations ventuelles sont automatiques La forme avec un seul argument imprime la fen tre sans modification de format La forme 5 arguments permet de sp cifier la r duction selon les axes des X des Y sous la forme de deux nombres r_x etr_y compris entre 0 0 et 1 0 On peut donner en x0 et y0 la position de l origine de l impression sur le papier Exemple gt gr print graphic imprimera la fen tre graphic r duite au quart chaque dimension tant r duite de moiti ProloglA 491 Primitives graphiques 7 Primitive de description de menus Un menu regroupe une suite d items dispos s verticalement Un item peut tre soit terminal soit lui m me un menu on parle alors de menu hi rarchique A tout item terminal d un menu hi rarchique est associ un but Prolog III qui est activ imm diatement en suspendant le programme en cours lorsque l item est s lectionn Lorsque la barre de menu existe chaque item de cette barre se comporte comme un item d un menu hi rarchique Il est possible d attacher un menu fugitif pop up particulier toute unit de type fen tre La primitive set_menu d crite ici permet de d finir
431. riques Le remplissage des zones a et B se fera r cursivement de la m me fa on placer un carr dans le coin inf rieur gauche et remplir deux sous zones i a Les zones et les sous zones sont s par es par des lignes bris es en forme d escalier allant du coin sup rieur droit des carr s au coin sup rieur droit du rectangle Ces lignes bris es ne descendent jamais et s il est possible d en tracer plusieurs pour aller d un point un autre on consid re toujours la plus basse Voici par exemple toutes les lignes de s parations correspondant la premi re solution du probl me lorsque N 9 112 PrologIA Bulag Les contraintes num riques D une fa on plus pr cise une zone ou une sous zone a la forme du sch ma de gauche ci dessous la totalit du rectangle tant lui m me assimil la zone particuli re dessin e droite Q P Q K La zone est d limit e par une ligne bris e inf rieure z allant d un point P un point Q et par une ligne bris e sup rieur L allant du m me point P au m me point Q Le point P est plac n importe o dans le rectangle remplir alors que le point Q d signe le coin sup rieur droit du rectangle Ces lignes bris es sont repr sent es par des suite altern es de segments verticaux et horizontaux Vo h Vir see 7 ha Vans o vi d signe la longueur d un segments vertical et h la longueur d un segment horizontal Les h sont toujours strictement positifs
432. rmin e par 0 qui contient une requ te Prolog III On notera qu avec cette version le passage de donn es ne se fait que de C vers Prolog II celui ci donnant ses r sultats sur la sortie courante de Prolog II laquelle peut tre modifi e Cette fonction retourne galement un statut d erreur Quand il n y a pas eu d erreur ERR3 _NOERR est retourn Sinon est retourn e un nombre positif correspondant une erreur pendant l ex cution de Prolog II e ERR3_NOINI Si Prolog III n est pas initialis 1026 ProloglA Bolig Bolig Utilisation de Prolog IHI sur Macintosh e ERR3_ERRANA S il y a une faute de syntaxe dans la commande Par exemple l appel err Pro3Goal enum x O0 lt x lt 4 produira l ex cution les affichages suivants et la variable err vaudra ERR3_NOERR Terminaison int Pro3Final Pro3Final R cup re les espaces allou s par Prolog III L appel de cette fonction ne se justifie gu re que pour r cup rer une importante place m moire C est ici galement que les fichiers ouverts par Prolog II sont ferm s Les retours possibles de cette fonction sont les deux statuts d erreur suivants e ERR3_NOERR pas d erreurs e ERR3_NOINI Prolog III n tait pas initialis Un petit exemple Voici comme illustration un petit exemple r sumant ce qui a t dit plus haut Dans cet exemple Prolog III est suppos tre utilis intens ment en deux e
433. rne les nombres flottants leur repr sentation interne et donc leur pr cision et leur tendue sont d termin s par les particularit s de votre machine Leur syntaxe co ncide avec celle utilis e dans la plupart des langages qui connaissent ce type de donn es num riques Elle est donn e en d tail dans le chapitre consacr la syntaxe Si les nombres flottants sont fort utiles voire indispensables dans la r solu tion de nombreux probl mes on peut aussi consid rer qu ils ont des effets nuisibles notamment sur l exactitude des calculs dans lesquels ils interviennent De plus le statut des nombres flottants parmi les autres objets qui constituent le domaine de Prolog II peut para tre au premier abord assez confus Il y a donc lieu de donner tout de suite quelques explica tions et pour commencer sur ce que les flottants ne sont pas e Les nombres flottants ne sont pas une notation alternative pour les nombres rationnels Il ne faut pas croire que 75 5 est une autre mani re d crire 755 10 M me si dans tel ou tel cas particulier l op ration est exacte la nature des calculs mis en uvre pour convertir un nombre flottant en un rationnel ne permet pas d assurer un r sultat g n ralement satisfaisant Sans compter que pratiquer syst matiquement de telles conversions serait trahir l esprit m me des nombres flottants en leur accordant une exactitude qu ils n ont jamais poss d e ni m me revendiqu e e Les nombres
434. roduise Ni le clic ni le caract re ne sont lus Rend pour k 0 retour chariot tap 1 clic en dehors de la liste 2 TAB t tap 3 un autre caract re que RC ou TAB t tap lt 2 x y m gt Dessine la liste et traite le clic x y m donn par exemple par gr_click b x y m Sort tout de suite apr s lt 3 x y m k gt Dessine traite le clic x y m donn par exemple par gr_click b x y m et prend la main jusqu ce qu un v nement de type clavier ou un clic l ext rieur du rectangle se produise Ni le clic ni le caract re ne sont lus Rend pour K 0 retour chariot tap 1 clic en dehors de la liste 2 TAB t tap 3 un autre caract re que RC ou TAB a t tap sys gr gr_list r L f Sel ISel ITop OSel OTop op est la primitive de base utilis e Son 3 me argument est actuellement inutilis il doit tre libre et son 4 me est le type de s lection des items Si vous d sirez modifier le type de s lection par d faut vous pouvez remplacer la r gle gr_list de sys l aide de reinsert ou de suppress puis assert par celle ci dans laquelle vous aurez chang le 28 par le type de votre choix gr_list r L ISel ITop OSel OTop op gt sys gr gr list r L _ 28 ISel ITop OSel OTop op Quelques types de s lections possibles parmi d autres Inside Macintosh IV 267 0 shift et command 28 shift ou command seulement valeur par d faut Prologi
435. ronnement Param tres connus Aucun Messages d erreur Non Description Bascule en syntaxe Prolog II si l on se trouve en syntaxe Edimbourg Se comporte en fait exactement de la m me mani re que l appel de la primitive set_config syntax Prolog II Voir galement e edinburgh set_config set_configuration ProloglA 319 R gles pr d finies et proc dures externes quit Fonction Quitter Prolog III Classe R gle pr d finie Prolog MI Cat gorie Environnement Param tres connus Aucun Messages d erreur Non Description Fait quitter Prolog III sans rien sauver Voir galement e quit N 320 ProloglA Bolig Bolig R gles pr d finies et proc dures externes quit N Fonction Quitter Prolog III Classe R gle pr d finie Prolog MI Cat gorie Environnement Param tres connus N Messages d erreur Non Description Fait quitter Prolog III sans rien sauver Si N a pour valeur 0 cette valeur est convertie dans le code correspondant pas d erreur pour le syst me d exploitation les autres valeurs de N ne sont pas converties Ce code est ensuite envoy au syst me d exploitation titre de statut de terminaison Remarques La forme quit quivaut quit 0 Voir galement e guit ProloglA 321 2 gens 2 Bol R gles pr d finies et proc dures externes L rational R Fonction V rifi
436. rouvera galement dans ce programme peut tre avec une certaine motion le toujours fameux pr dicat conc naive_reverse lt gt lt gt gt naive reverse lt E gt X X gt naive reverse X X conc X lt E gt X conc lt gt X X gt conc lt E gt X V lt E gt Z gt conc X Y Z Voici maintenant le m me programme qui utilise cette fois ci la concat nation de Prolog III Le pr dicat bound_cone installe la contrainte x x lt E gt apr s l ex cution de naive_reverse On est alors certain de conna tre la taille du tuple x Il n y a donc aucun retard mis en place Cette mani re de faire est bien plus efficace que la premi re dans la mesure o la concat nation de Prolog IIT est bien sup rieure au pr dicat cone d crit dans le programme pr c dent naive r versel s lt gt gt naive reverse lt E gt X X gt naive reverse X X bound conc X lt E gt X Voici enfin un troisi me programme qui met en place les concat nations avant l ex cution de naive_reverse Des contraintes retard es sont alors mises en place voir chapitre sur les retardements Si le programme fournit les r sultats attendus les temps d ex cutions sont moins bons que dans le cas pr c dent en raison de la gestion des retards naive reverse lt gt lt gt gt naive reverse lt E gt X X lt E gt gt naive reverse X Xx 82
437. rsion automatique de type Quand une fonction a un nombre incorrect d arguments ou quand certains de ses arguments sont du mauvais type val produit une erreur e La valeur d un nombre ou d une cha ne est gale ce nombre ou cette cha ne e La valeur d un tableau externe ou interne indic est gale la valeur de l l ment correspondant de ce tableau ProloglA 367 2 gens 2 Bol R gles pr d finies et proc dures externes L Exemples gt def array tab 100 assign tabl50 3 gt val tabl501 X e La valeur d un identificateur i est d finie comme suit 1 si une constante k a t affect e i au moyen de la r gle assign alors la valeur de i est k 2 si i n a pas fait l objet d une affectation pr alable alors la valeur de i est i lui m me Exemples gt assign un 1 gt val un x val deux y x 1 y deux Voici toutes les fonctions valuables add t t2 valeur add t1 t2 valeur t valeur t2 Les valeurs de t et t2 doivent tre num riques sub t1 t2 valeur sub t1 t2 valeur t1 valeur t Les valeurs de t et t2 doivent tre num riques mul t t2 valeur mul t1 t2 valeur t1 x valeur t Les valeurs de t et t2 doivent tre num riques div t1 t2 valeur t1 valeur div ti t2 reur to Il s agit du quotient entier par d faut Les valeurs de t4 et t2 doivent tre des nombres entiers 368
438. s Aucun Messages d erreur Non Description free T est ex cut avec succ s si l on ne conna t pas l tiquette initiale de T et l on ne sait pas si le nombre de ses fils est nul ou non Echoue dans tous les autres cas T E L Exemples free X X V1 V2 free XxX U X num U tuple free X 1 2 3 free sommet L free sommet X Y 2Z free sommet Ll L lt gt Voir galement e free_label known bound bound_tree bound_tree 252 ProloglA Bolig R gles pr d finies et proc dures externes free label T Fonction V rifie que l tiquette du terme T n est pas connue Classe R gle pr d finie Prolog III Cat gorie Contr le Param tres connus Aucun Messages d erreur Non Description free_label T est ex cut avec succ s si l on ne conna t pas l tiquette initiale de T Echoue dans tous les autres cas Exemples free label X X V1 V2 free label X X num free label X 1 2 3 free label exemplelIL Voir galement e free known bound bound_tree bound_tree ProloglA 253 2 gens 2 Bol R gles pr d finies et proc dures externes L freeze T P Fonction Retardement de l ex cution d un but Classe Proc dure externe Prolog M I Cat gorie Contr le Param tres connus Aucun Messages d erreur Non Description Retarde l ex cution du but P tan
439. s 98 projection sur un sous vocabulaire 127 prologlil 319 put 397 Q qualifieur 24 quit 8 198 320 R raccourci 496 rad 172 370 radio bouton 500 rafra chissement de la fen tre graphique 473 rational 106 322 read 398 real 106 323 r capitulatif op rations et relations bool ennes 123 op rations et relations d finies sur les arbres et les tuples 79 redef_array 324 r gles 60 pr d finies bool ens 128 num rique 104 tuples 80 syntaxe 440 456 reinsert 188 189 325 relations 49 bool ennes 120 comparaisons num riques 52 de type 53 galit 50 implication 52 120 in galit 50 nombre de fils 74 num riques 100 unaires 53 reload 191 327 remove_implicit 183 328 repeat 329 requ tes 61 syntaxe 440 456 reset_cpu_time 198 330 reset_window 472 PrologiA 553 Index Pely r solution des syst mes de contraintes 57 restore_menubar 497 restrictions concat nation 77 lin arit 102 nombres entiers 102 taille 76 resume_trace 331 retardements concat nation 154 contraintes non lin aires 106 contraintes num riques 156 freeze 149 tailles 151 retour chariot 486 490 502 511 retract 190 332 399 retractall 400 return 431 rubout 431 rule 190 333 rule_nb 336 S sauvegarde d un module 11 sauvegarde de modules save 192 SAVE 468 470 save 192 337 save_menubar 497 save_window 469 see 401 seen 402 s mantique 62 d clarative 62 des termes 46 op rationnelle 62 s parateur
440. s contraintes portant sur les variables figurant dans le but et ou la t te de r gle essayer Dans tous les cas cette trace n est pas interactive et ne permet qu un suivi difficile de l ex cution d un programme en raison notamment de la grande quantit d informations affich e Tr s souvent on souhaite ne voir qu une 1 Voir trace no_trace suspend_trace resume_trace set_config etc PrologilA 2003 Outils de mise au point ou quelques portions restreintes de l ex cution Bien qu il soit possible d utiliser les pr dicats sp cifiques en des endroits strat giques du programme ceci ne peut se faire qu on prix d une r insertion des r gles modifi es et reste donc lourd d emploi Pour ces raisons le d buggeur est pr f r au simple tra age Son interactivit permet de d terminer avec pr cision l endroit ou l on se trouve de parcourir la d monstration en cours d imprimer des informations pertinentes d viter les impressions superflues de reprendre ou modifier l ex cution d une section de programme et bien d autres choses encore 3 Aper u du mod le des boites Le d buggeur Prolog III est bas sur le mod le des boites que l on trouve dans la plupart des d buggeurs Prolog plus classiques Le concept important de ce mod le est que chaque appel peut tre consid r comme une boite opaque ou transparente selon le d sir de l utilisateur d avoir une trace d ex cution plus ou moins
441. s gt gt lt terme gt lt constante gt lt identificateur gt 1 liste vide lt bool en gt lt entier gt lt liste vide gt tuple vide lt r el gt lt constante caract re gt lt cha ne de caract res gt Prolog IA 435 Syntaxes lt multiplicande gt lt entier gt lt r el gt lt terme gt lt suite de termes gt lt terme gt lt terme gt lt suite de termes gt Cette syntaxe va nous permettre de construire des expressions num riques l aide en particulier des quatres op rateurs des expressions bool ennes gr ce aux op rateurs bool ens amp lt gt gt de construire des tuples avec le constructeur de tuple lt gt et l op rateur de concat nation de former des arbres l aide des parenth ses ou des crochets Expressions num riques Les expressions num riques de Prolog II sont form es l aide de constantes num riques de variables des quatre op rations Donnons quelques exemples d expressions num riques correctes X 355 113 3 2 1000 1 2 3 4 5 6 7 y 1 3 4 x y 2z 5 4 3x 4 14 22 7 x 2x 1 y a b x y et des exemples incorrects 5 x y est un arbre dont l tiquette est 5 5 4x est syntaxiquement incorrecte xy est un identificateur et non pas x xy 3 x doit s crire 3 x Expressions bool ennes Les expressions bool ennes sont form es l aide de var
442. s lues sur l unit courante d entr e Ces r gles lorsqu elles sont valides sont d abord cod es puis ensuite list es donc d cod es sur la sortie courante Voir galement e no_echo e set_config set_configuration get_config get_configuration 240 ProloglA Bolig R gles pr d finies et proc dures externes edinburgh Fonction Bascule en syntaxe Edimbourg Classe Proc dure externe Prolog II Cat gorie Environnement Param tres connus Aucun Messages d erreur Non Description Bascule en syntaxe Edimbourg si l on se trouve en syntaxe Prolog II Se comporte en fait exactement de la m me mani re que l appel set _config syntax Edinburgh Remarques Il est possible de se retrouver directement sous le mode syntaxique Edimbourg pour chaque session Prolog INI Pour cela il suffit une premi re fois d ex cuter la primitive Edinburgh mode syntaxique par d faut Prolog II puis de sauver l tat courant l aide de la commande exit On invitera chaque utilisateur renommer auparavant le fichier initial3 psv afin d en conserver une version l tat d origine Voir galement e prologlll e exit set_config ProloglA 241 R gles pr d finies et proc dures externes edit l Fonction Edition de r gles Classe Proc dure externe Prolog II Cat gorie Environnement Param tres connus Voir ci apr s Messages d erreur Non Description L
443. save L S Fonction Sauvegarde de modules Classe R gle pr d finie Prolog MI Cat gorie Environnement Param tres connus L S Messages d erreur Cha ne attendue Fin de liste attendue Pr fixe inexistant Description Sauvegarde de modules S est un nom de fichier cha ne de caract res et L une liste de pr fixes cha nes de caract res Cette commande produit la sauvegarde dans le fichier indiqu de tous les l ments r gles variables statiques et tableaux des modules correspondant aux pr fixes donn s dans la liste L Exemple gt save data dict l myfile mo Remarque Le fichier produit est un fichier de code objet destin tre ult rieurement charg dans un autre environnement Prolog III au moyen de la commande reload Ce n est donc pas un fichier texte et il ne faut utiliser ni insert ni input avec ce fichier Voir galement e reload e exit quit PrologIA 339 R gles pr d finies et proc dures externes set_config S V Fonction Modification de certains param tres Classe Proc dure externe Prolog II Cat gorie Environnement Param tres connus S V Messages d erreur Non Description Cette primitive permet de sp cifier le comportement de Prolog III pour les points indiqu s ci dessous En regard de chaque point on indique la cha ne fournir comme premier param tre e le mode de fonctionnement de l interpr
444. si que les tuples et les listes s crivent de fa on identique dans les deux syntaxes Le point de divergence est le moment o en syntaxe Edimbourg on d crit sous forme de termes les contraintes r gles et requ tes cette vision des choses tant grandement favoris e par l introduction des op rateurs ces symboles qui permettent des notations infix es postfix es ou pr fix s Mais si on examine ce qu on peut produire avec ces syntaxes on s aper oit rapidement que les contraintes s crivent de la m me fa on une exception pr s et que les r gles et requ tes se forment peu pr s selon un patron commun Conventions grammaticales Les grammaires de Prolog III sont d crites sous forme d ensembles de r gles hors contexte augment es de quelques signes sp ciaux Le signe de r criture est et le membre gauche d une r gle n est pas r p t lorsqu il est identique celui de la r gle pr c dente 1 Underline est le nom anglo saxon du caract re _ qu on surnomme blanc soulign Prolog IA 425 Syntaxes e Les non terminaux sont des suites de mots entour s par lt et gt e Les terminaux du langage sont crits en caract res gras Le mot espace d signe quant lui un caract re parmi les caract res barre d espacement touche de tabulation retour chariot et autres caract res non imprimables Les blancs qui figurent dans les r gles ne sont pas significatifs e On appell
445. sonnables c est dire toutes sauf celles qui de mani re vidente rendraient le syst me S U R U s t insoluble ProloglA 65 Concepts de base Prelog utilisation de la r gle cadeau chocolats gt x prix x p P lt 100 X X cadeau X cadeau chocolats qui se simplifie son tour en x prix x p P lt 100 X Xx X chocolats utilisation de la r gle prix chocolats 90 gt x P lt 100 X X X chocolats prix X P prix chocolats 90 lequel se simplifie en x P lt 100 X X X chocolats P 90 La suite de buts tant devenue vide Prolog II affiche alors la solution du syst me courant S P lt 100 X X X chocolats P 90 ou plut t la partie int ressante de cette solution soit X chocolats ensuite Prolog II explore les autres ex cutions possibles de la machine non d terministe 1 2 3 c est ainsi que la solution X vin est affich e peu apr s ststs 66 ProloglA Bolig Arbres tuples cha nes et listes Introduction Les arbres Les tuples R gles pr d finies sur les tuples Les listes Les cha nes Exemples oE E E Que trouve t on dans ce chapitre Le domaine de Prolog II est celui des arbres finis et infinis Un nouvel op rateur universel a t ajout par rapport aux Prolog standard le constructeur g n ral d arbres La notion de liste a galement t tendue celle de tuple et ce
446. spacement vertical 504 fen tre graphique courante 473 file 497 file_window 466 find 497 ProloglA 517 Primitives graphiques Pely FONT 469 471 fonte 472 482 483 484 FEONTSIZE 468 471 front_window 466 get_key 487 get_screen 466 get_window 466 gr_arc 476 gr_arc 477 gr_button_hit 486 gr_choosecolor 482 gr_click 479 480 gr_color 481 gr_color2 481 gr_color3 481 gr_dialog 498 gr_draw_buttons 485 gr_editf 486 gr_erase 474 gr_font 484 gr_getmouse 480 gr_icon 478 gr_line 474 gr_lineto 474 gr_list 489 gr_load 516 gr_mode 482 gr_move 474 gr_moveto 474 gr_pen 482 gr_penloc 474 gr_polygon 476 gr_popupltem 491 gr_print 492 gr_rect 475 gr_setorigin 474 gr_stringwidth 482 gr_text 483 518 gr_window 472 gr_window_is 472 GRAPHICS 467 groupe 500 gtty 489 input 516 item coch 494 kill_button 515 kill_window 472 ligne de texte ditable 501 ligne de texte non ditable 500 load_graphic 464 MacDraw 516 MacPaint 516 menu fugitif 493 menu hi rarchique 493 menu pop up 493 MODAL 467 modes de transfert 483 motif 482 MPW 489 new_windotw 467 NLINES 468 option fermeture 473 output 516 pixels 466 471 474 482 504 511 police de caract res 469 primitive de groupement 505 primitives d agencement 504 primitives de description 500 print_window 472 raccourci 496 radio bouton 500 rafra chissement de la fen tre graphique 473 reset_window 472
447. split lt 1 2 3 gt V 1 2 3 split U V U tuple U 3 U lt X1 X2 X3 gt V X1 X2 X3 Nous avons renomm les variables interm diaires cr es par Prolog II Voir galement e list_string list_tuple 348 ProloglA Bolig R gles pr d finies et proc dures externes spy lt I N gt spy S Fonction Espionnage de paquets de r gles Classe Proc dure externe Prolog M II Cat gorie Environnement Param tres connus S au moins un parmi I et N Messages d erreur Module inexistant Description Surveille un ou plusieurs paquets de r gles en installant des points espion Dans la premi re forme I d signe l identificateur de paquet et N l arit de ce paquet et au moins l une des deux informations doit tre connue l appel Un chec survient dans le cas contraire Dans la deuxi me forme S est un nom de module sous la forme d une cha ne de caract re Toutes les r gles du module S sont alors concern es Provoque une erreur s il n existe aucune r gle de pr fixe S L utilisateur se r f rera au manuel Mise au point de programmes Prolog II pour obtenir la d finition et l emploi des points espion Voir galement no_spy e debug no_debug ProloglA 348 i 2 gens 2 Boli R gles pr d finies et proc dures externes L 348 ii ProloglA A gt 2 L2 bd L a R gles pr d finies et proc dures externes state Fonction
448. ssion est plus longue que la place restant sur la ligne courante alors elle est coup e l endroit requis par insertion d un retour chariot masqu par un caract re L criture du terme ob it en outre aux conventions suivantes e Les listes sont imprim es dans la syntaxe d Edimbourg crochets e Tout identificateur ne r pondant pas la syntaxe d un identificateur est quot e Le contexte courant d termine les abr viations possibles pour les identificateurs outl t quivaut la suite de buts out t line lorsque le terme t a t crit on produit le passage la ligne suivante Exemple gt out 1l Pierre Salut l 1 Pierre Salut l gt N B Les accolades imprim es la suite du terme indiquent la r ussite de l effacement du but out 1 Pierre Salut Une mani re d en emp cher l impression consiste faire chouer artificiellement cet effacement 194 ProloglA Bulag WA hrs a L environnement gt out 1 Pierre Salut line fail 1 Pierre Salut gt outm s outml s Ecrit la cha ne s sur l unit de sortie courante sans crire les quotes et en interpr tant correctement les caract res de formatage que s peut contenir comme n etc Si la cha ne est plus longue que la place restante sur la ligne en cours alors elle est coup e par un retour chariot masqu outml s quivaut outm s lin
449. ssique cette fen tre grossit par ajout de lignes la suite de celles d j crites La derni re ligne de console poss de certains privil ges e la frappe de la touche retour chariot produit la lecture par Prolog III de cette derni re ligne sans l ventuel prompt que Prolog aurait pr alablement affich et l ex cution de la commande que cette ligne repr sente e la frappe de la touche enter sur le pav num rique produit si aucun texte n est s lectionn le m me effet que la touche retour chariot siun texte est s lectionn n importe o dans la fen tre console la recopie de ce texte sur la derni re ligne et la lecture et ex cution du tout par Prolog III Bien entendu la derni re ligne est ditable et peut tre corrig e par les moyens habituels souris etc aussi longtemps que la frappe de retour chariot n a pas termin la lecture 5 Ajout de r gles pr d finies Cette section montre comment ajouter de nouvelles r gles pr d finies l ensemble standard et d crit les proc dures d interface Ces r gles peuvent soit tre enti rement crites en Prolog III cela ne fait alors intervenir aucun concept nouveau soit faire r f rence des fonctions externes crites en C ou tout autre langage compatible avec C Des proc dures de communication permettent le passage de param tres entre les r gles Prolog et le programme externe ces param tres doivent tre de type entier r
450. t Il peut appara tre partout o un caract re espace serait non significatif On peut aussi parenth ser les commentaires l aide de groupements form s par la r p tition de pour louverture et de pour la fermeture avec un m me facteur de r p tition Ceci permet d embo ter les commentaires Voici des exemples ceci est un commentaire tenant sur deux lignes le texte commentaire est inclus Un autre type de commentaire est celui introduit par le caract re et qui se termine la fin de la ligne courante Q texte commenter commentaire 3 Syntaxe d Edimbourg Variables Les caract res utilisables dans une variable sont les suivants lt alphanum rique tendu gt lt lettre gt lt chiffre gt apostrophe underline dollar Dans toutes les modes syntaxiques syntaxe de base et syntaxe Edimbourg on peut crire une variable de la fa on suivante 442 PrologiA Bolig Syntaxes lt variable gt _ lt alphanum rique tendu gt _underline par exemple x _1 _toto F F Un cas particulier de nom de variable est le nom _ dont chaque occurence repr sente une nouvelle variable que l on ne souhaite pas nommer A cette exception pr s cette notation reste exceptionnelle et on lui pr f re la forme suivante sp cifique la syntaxe Edimbourg lt variable gt lt majuscule gt lt alphanum rique tendu gt
451. t gt E U exemple lt 1 2 3 gt E exemple U lt lt 1 2 3 gt gt gt E U 123 E lt gt U 123 gt E U 121 3 E 121 3 U lt gt Les exemples suivants montrent comment sont simplifi es certaines quations sur les arbres gt X Y Y X Y X X 0 gt lt X gt X Yl x lt gt Y lt lt gt gt gt Y X X IY Y lt gt X lt gt Voici enfin des exemples qui montrent des contraintes pour lesquelles les solutions sont des arbres infinis gt X Y XIY Y lt Y gt X 0 gt X Y lt lt X Y gt gt x lt gt Ye lt lt gt Y gt PrologIA 15 Arbres tuples cha nes et listes Restrictions sur la contrainte de taille En Prolog III on ne peut imposer un arbre d avoir un nombre d termin de fils imm diats qu la condition que ce nombre soit une constante c est dire un entier positif Toutefois pour augmenter la facilit de programmation si ce nombre est repr sent par un terme contenant des variables un m canisme de retardement est mis en place par Prolog III Nous reviendrons sur ce m canisme dans le chapitre sp cialement consacr aux retardements E lt X ff Y gt Z 13 Dans une contrainte de taille le nombre de fils imm diats doit tre explicitement connu 3 Les tuples On appelle tuple tout arbre dont l tiquette
452. t Bien entendu toutes ces consid rations s appliquent de mani re analogue aux expressions bool ennes Ainsi les termes X amp l x o X sont trois mani res de d signer l ensemble de tous les bool ens Si l on pr f re on peut consid rer que ces trois expressions repr sentent un arbre qui est r duit une feuille tiquet e par un bool en et qui pour le reste est inconnu 6 Relations En Prolog III les relations unaires et binaires traduisent des conditions portant sur des arbres comme lt aa bb cc gt est diff rent de aa bb cc ou 1 est sup rieur o Nous disposons de relations tout fait g n rales comme l galit entre arbres et de relations sp cifiques qui n ont de sens que pour une cat gorie bien particuli re d arbres comme les relations d ordre sur les nombres ou l implication entre bool ens ProloglA 49 Concepts de base Les relations ne sont pas des op rations Le propre d une op ration appliqu e un n uplet d arbres est de rendre un arbre titre de r sultat le propre d une relation appliqu e un n uplet d arbres est d tre ou non v rifi e Bien que d finie sur des arbres ou des couples d arbres elle ne leur associe pas des l ments du domaine de Prolog IIT et m me si dans le langage courant un dit qu une relation est vraie ou fausse il ne faut pas voir cela comme des occurrences des valeurs bool ennes 1 et o du domaine d
453. t insert Voir galement e reconsult insert PrologiA 385 R gles pr d finies Edimbourg Bulag functor T E N Fonction Classe Cat gorie Param tres connus Messages d erreur Constructeur g n ral d arbre Primitive Edimbourg Arbres listes et tuples Aucun Non Description Associe un arbre T son tiquette E et son arit N Cette primitive est actuellement d crite par la r gle functor E U E N U N Elle impose E d tre un feuille et N d tre num rique aucun n tant forc ment connus l appel Exemples functor a b c X a N 2 functor T T alu 11 U 1 4 2 386 X N 2 PrologiA Bolig R gles pr d finies Edimbourg get X Fonction Rend le code d un caract re non blanc lu Classe Primitive Edimbourg Cat gorie Entr es Sorties Param tres connus Aucun Messages d erreur Fin de fichier d entr e Description X est unifi avec le num ro de code ASCII du premier caract re non blanc lu sur l entr e courante La primitive sous jacente est in_char La conversion du caract re en code ASCII est faite par la primitive char_code Voir galement e in_char get0 ProloglA 387 Bolig R gles pr d finies Edimbourg getO X Fonction Rend le code du prochain caract re lu Classe Primitive Edimbourg Cat gorie Entr es Sorties Para
454. t offerte en Prolog III de r soudre des syst mes d quations et d in quations sur les nombres rationnels et r els ouvre la voie de la programmation logique tous les probl mes de type ordonnancement planification r seaux analyse financi re etc Nous aurons l occasion dans ce chapitre de d velopper des exemples de ce type non sans avoir au pr alable expos les diverses possibilit s offertes par le langage et concernant ce type de contraintes de la description syntaxique des syst mes num riques jusqu l utilisation de certains pr dicats valuables sp cifiques D cembre 1990 Pr ologlA Les contraintes num riques 1 Introduction Prolog a toujours t consid r juste titre comme un puissant langage symbolique impropre tout traitement num rique Ceci est li en grande partie des consid rations d ordre historique et bons nombres d interpr teurs et de compilateurs du langage se sont jusqu pr sent born s ajouter des couches coiffant l unification et permettant de manipuler certaines expressions num riques Ces traitements consistent en fait valuer de telles expression en effectuant des calculs sur des variables dont les valeurs sont connues au moment de l unification Prolog III propose une approche qui va bien au del de ce simple sucre syntaxique puisque les variables repr sentant des nombres sont trait es comme toutes les variables Prolog III c est dire que
455. t 0 gt k 0 Vrais 0 lt gt 1 gt Vrais 0 lt b1 gt L b1 amp b2 gt Vrais 0 L b2 Vrais k lt bl gt L b gt Vrais k 1 L b2 Vrais k L b3 k 0 b b1 amp b2 b1 amp b3 L id e g n rale de ce programme est de consid rer le probl me de la mani re suivante Il y a exactement k l ments vrais dans une liste de bool ens de t te p et de queue 1 si et seulement si l une des deux propositions suivantes est vraie L utilisation du param tre b permet en outre de rendre le programme enti rement d terministe si k et la taille de la liste z sont connus i b est vrai et il y a exactement k 1 l ments vrais dans la liste amp ii b est faux et il y a exactement x l ments vrais dans la liste L Voici un exemple d ex cution de ce programme 134 gt vrais 2 lt X Y Z T gt 1 X amp Y amp Z 0 X amp Y amp T 0 X amp Z amp T 0 Y amp Z amp T 0 X N E X Y T 1 XUL Zi Teri D UN PU PR PrologiA Bolig Pol Les contraintes bool ennes On notera que la r ponse fournie apr s simplification et limination des variables inutiles du syst me de contraintes final induit une formalisation diff rente du probl me pos que l on peut exprimer de la mani re suivante k bool ens sont vrais parmi n si et seulement si toute disjonction de n k 1 l ments est vraie et toute conjonction de k 1
456. t gorie V rifications de types Param tres connus Voir ci apr s Messages d erreur Non Description Cette r gle pr d finie v rifie que R est un terme repr sentant une valeur num rique connue Si ce n est pas le cas number R choue number est un synonyme de la primitive num Voir galement e num integer real rationnal PrologIA 395 Bulag R gles pr d finies Edimbourg op N I1 S op N I1 S I2 Fonction D claration d op rateur Classe Primitive Edimbourg Cat gorie Arbres listes et tuples Param tres connus N I1 S I2 Messages d erreur Non Description D clare l op rateur S avec la pr c dence N et le type de parenth sage 11 S est un soit un identificateur non quot soit une cha ne de caract res Dans le cas o S est une cha ne son contenu ne doit d buter ni par une constante ni par une variable ni par espace Dans la forme 3 arguments S peut tre une liste la d claration s applique alors chaque l ment de la liste Le symbole fonctionnel repr sent par S est 12 si celui ci est fourni sinon le symbole S quot L associativit est pr cis e par un identificateur ou une cha ne de caract res combinant une deux ou trois des lettres f x y avec les conventions suivantes f repr sente l op rateur x repr sente un expression de pr c dence inf rieure f y repr sente un expression de pr c dence inf rieure ou gale f Les co
457. t 1 2 3 gt gt ZIN Voici enfin un exemple du m me type portant sur une cha ne de caract res 11231 lt gt s 1 72 03 lt gt 123 sue da 2 sel SE 9 ProloglA 73 Arbres tuples cha nes et listes Contraintes sur les arbres Les contraintes sont construites l aide de relations Les relations utilis es sur les arbres sont e l galit e l in galit e la relation unaire qui impose un arbre d avoir un nombre d termin de fils imm diats Dans le cas o cet arbre est repr sent par la variable A et son nombre de fils par v cette relation se note A N Exemples Voici quelques exemples de contraintes sur les arbres X Erable acer feuilles lobes 7 caduques 1 Cette contrainte impose la variable x de repr senter l arbre donn en exemple pr c demment x E U Y E V Cet ensemble de contraintes impose aux variables x et y de repr senter deux arbres dont les tiquettes initiales sont gales X E U E lt gt Cette contrainte impose la variable x de repr senter un arbre qui ne soit pas un tuple Examinons enfin quelques ex cutions qui illustrent l utilisation de ce type de contraintes 7 4 PrologiA Bolig Bolig Arbres tuples cha nes et listes gt E U exemple 1 2 3 E exemple U lt 1 2 3 gt gt E U lt 1 2 3 gt E lt gt U lt 1 2 3 g
458. t blanc soulign _ commen ant par une lettre et dont le second caract re s il existe n est pas une lettre Les formules suivantes sont des noms de variables X v Z 2 V_ariable Il y a une profonde diff rence entre ce que signifient les variables dans la plupart des langages classiques et ce qu elles repr sentent en Prolog II Dans les langages classiques une valeur est attach e chaque variable L ex cution d un programme produit toutes sortes de modifications de ces valeurs et obtient la solution du probl me sous forme de valeurs finales des variables Dans ces langages une variable d signe constamment un objet parfaitement connu ou bien l utilisation de la variable est ill gale EN PROLOG III LES VARIABLES REPR SENTENT DES ARBRES INCONNUS A l oppos une variable Prolog III d signe un arbre inconnu exactement comme une inconnue dans une quation math matique d signe un nombre inconnu par exemple x dans 1 Dans la syntaxe marseillaise de Prolog III les variables n ont pas commencer par une lettre majuscule ni les identificateurs par une lettre minuscule Cependant telle est la r gle dans la syntaxe d Edimbourg Pour cette raison bien qu crits dans la syntaxe originale la plupart des expressions Prolog III donn es en exemple dans le texte seront autant que possible compatibles avec les deux syntaxes 34 ProloglA Bolig Bolig Concepts de base X 1 2 X 1 Dans cet es
459. t chiffre octal gt 0 1 7 lt chiffre hexa gt 0 11 lo lal F la l l Nous verrons la fin de ce chapitre une fois la syntaxe enti rement d crite le statut particulier du caract re espace Constantes Les constantes sont les donn es les plus simples On distingue les constantes suivantes e lesidentificateurs e les nombres entiers non n gatifs r els non n gatifs e les bool ens Prolog IA 427 Pely Syntaxes Voici la liste vide les constantes caract res les cha nes de caract res lt constante gt lt identificateur gt liste classique vide lt bool en gt lt entier gt lt liste vide gt tuple vide lt r el gt lt constante caract re gt lt cha ne de caract res gt la syntaxe de ces diff rentes constantes l exception des identificateurs d crits plus loin 428 lt entier gt lt chiffre gt lt chiffre gt 1123 456 ou 432513 lt bool en gt 0 1 lt liste vide gt lt gt lt r el gt lt mantisse gt lt exposant gt comme 1 4e 17 lt mantisse gt lt suite de chiffres gt lt suite de chiffres gt lt suite de chiffres gt lt suite de chiffres gt lt exposant gt lt Ee gt lt signe gt lt suite de chiffres gt PrologiA Bolig Syntaxes lt signe gt lt suite de chiffres gt lt chiffre gt
460. t connu num re successivement toutes les valeurs de correspondant une r gle d acc s I Si I n est pas connu i e est une variable unifie l argument successivement avec toutes les formes I A des r gles du module d termin par le pr fixe par d faut du contexte courant Voir galement e rule 230 ProloglA Bolig R gles pr d finies et proc dures externes Fonction Classe Cat gorie Param tres connus Messages d erreur Coupure Proc dure externe Prolog II Contr le Aucun Non Description Le pr dicat s ex cute de la m me mani re que slash en syntaxe marseillaise ou cut en syntaxe Edinburgh savoir qu il coupe tous les choix possibles le pr c dant dans la r gle o il est pr sent Ces choix sont les autres mani res d ex cuter la t te de cette r gle et les autres mani res d ex cuter les buts de cette r gle pr c dant le 7 La diff rence entre ces trois notations est que la forme identificateur quot qui est donc un terme est la seule utilisable l int rieur d un terme comme argument par exemple alors que les formes et ne sont que des parasites employ s uniquement dans une suite de buts queue de r gle ou requ te couleur rouge couleur bleu taille grand taille petit choixl lt X Y gt choix1 c est choix2 lt X Y gt choix2 c est choix3 lt X Y gt choix3 c est choix4 lt X Y gt
461. t correct Des exemples de termes syntaxiquement incorrects toto x y z t El1 2 1 2 X toto c lt 1 2 gt mettre des blancs autour du 452 ProloglA Bulag Bolig Syntaxes Contraintes Les contraintes sont toujours exprim es l int rieur d un ensemble entre accolades appel syst me de contraintes On distingue quatre familles de contraintes e les contraintes g n rales d galit et de diff rence de termes e les contraintes num riques inf rieur et sup rieur ou gal e la contrainte bool enne implique e les contraintes de typage de termes Bien qu un syst me de contraintes puisse s exprimer sous forme de terme 2 OI nous allons en donner un apercu plus cibl e de sa syntaxe lt syst me de contraintes gt lt contrainte gt lt contrainte gt lt contrainte gt lt terme 650 gt Prolog IA 453 Syntaxes lt terme 650 gt lt terme 649 gt lt terme 649 gt lt terme 649 gt lt terme 649 gt lt terme 649 gt lt terme 649 gt lt terme 649 gt lt terme 649 gt lt terme 649 gt lt terme 649 gt lt terme 649 gt lt terme 649 gt lt terme 649 gt lt terme 649 gt lt terme 649 gt lt terme 649 gt lt terme 649 gt lt terme 649 gt lt terme 649 gt lt terme 649 gt gt lt terme 649 gt lt lt terme 649 gt lt lt terme 649 gt gt lt terme 649 gt gt lt terme 649
462. t pour m moire que P1 est le pr fixe du module S1 la suite explicite S2 la suite implicite et P2 le pr fixe par d faut On peut utiliser module avec seulement le premier les deux premiers ou les trois premiers arguments dans les conditions d crites pr cis ment au chapitre Environnement module P est quivalent module P sys P module P S est quivalent module P S sys P module P S I est quivalent module P S I P Voir galement e end_module e set_context current_context close_context_dictionary e add_implicit remove_implicit dictionary 298 ProloglA Bolig R gles pr d finies et proc dures externes mult N1 N2 N3 Fonction Classe Cat gorie Param tres connus Messages d erreur Multiplication avec retardement R gle pr d finie Prolog III Contraintes num riques Voir ci apr s Non Description Pose la contrainte N3 n cessaires Exemples gt mult X Y Z Z X gt Y N1 N2 avec s il y a lieu les retardements Voir galement e bound_mult PrologIA 299 Ed L ka Ed ANA R gles pr d finies et proc dures externes n new Fonction Suppression des r gles d un module Classe R gle pr d finie Prolog MI I Cat gorie Gestion des r gles et des identificateurs Param tres connus Aucun Messages d erreur Non Description Supprime toutes les r gles du module
463. t que le terme T n est pas connu On remarquera notamment que si le terme T est r duit une variable num rique ou bool enne l ensemble de contraintes courant peut r duire suf fisamment le domaine des valeurs possibles de cette variable pour provoquer l ex cution de P Un terme est connu lorsque l on connait l tiquette initiale de l arbre qu il repr sente et que l on sait si c est une feuille ou non si son nombre de fils est nul ou non nul Remarque Lorsque T devient connu les buts gel s sur T viennent s ins rer en t te de la r solvante Pour des raisons d efficacit l ordre dans lequel ils seront ex cut s n est pas sp cifi Voir galement e known free 254 ProloglA Bolig R gles pr d finies et proc dures externes garbage_collection Fonction R cup ration de m moire Classe Proc dure externe Prolog II Cat gorie Environnement Param tres connus Aucun Messages d erreur Non Description Provoque l ex cution du m canisme de r cup ration de m moire Ceci est utile dans la mesure o Prolog III g re automatiquement la m moire qui lui est allou e chaque tape de la r solution Il peut ainsi s av rer n cessaire pour traiter une tape particuli rement co teuse de provoquer ce m canisme par programme de mani re pouvoir disposer du maximum d espace disponible En effet la place occup e avant le traitement de cette tape peut n tre pas suffis
464. t relations 79 4 R gles pr d finies sur les Opinion haut 80 Tailles et concat tionS nsise a E E a EEE EAEE 80 vi PrologilA Pely Bolig Table des mati res DAIV TS Een e AE E R A 81 Un exemple de programme sur les tuples 81 5y CE CR RC EAEE TE a as 83 Primitives S r les list s tiens Re E a A ni 84 6o L s hatnes noae n ai eat ete Re 85 Primitives sur les chaines etc Son eR ls 85 Tx ExXe mi ples ne nantais Rain 87 Calcul des feuilles d un arbre iiini aiii esiin 87 Quick SOffs Anpas aei Pa en date aa L door een Pace 87 Une Suite P riodiques ssrustn at ee nie rar a nn sn T 89 Crible d Eratosth ne ss 90 Les contraintes n umM rIQUeS 5eme inner 93 Te Mod HOM Essen A a 94 2 G n ralit s roon A nds cn Ant 94 s nombres sui mat terne nee eee 94 Expressions num riques icsse tnne ea i e asiat neika eia 97 Les constantes num riques ssssssssessessssststeresssssssrersnsesseeeerssseees 97 Les op rateurs num riques 98 Priorit s des op rateurs num riques 98 Les r lations his nie then fo tetes eenst tetes 100 Relations unair s si RE rE st dr 100 Relations binaires ne Ann tre tan de ann 101 Contraintes num riques 101 Exemples de contraintes num riques 101 ReStH AONS ist E A nana tn ire nec tee E 102 Forme normal enuresia epe aaen r tentant 102 eS QUAt
465. t s Fait sortir de Prolog en sauvant la totalit des programmes couramment connus y compris ceux qui constituent le superviseur de Prolog II Le fichier produit a pour nom prolog3 psv premi re forme ou la valeur de s qui doit tre une cha ne de caract res deuxi me forme quit n quit Fait quitter Prolog III sans rien sauver Si n a pour valeur 0 cette valeur est convertie dans le code correspondant pas d erreur pour le syst me d exploitation les autres valeurs de n ne sont pas converties Ce code est ensuite envoy au syst me d exploitation titre de statut de terminaison La deuxi me forme quit quivaut quit 0 Temps et autres mesures reset_cpu_time r initialise le chronom tre cpu_time x cpu_time unifie x avec le temps cpu en millisecondes coul depuis le dernier reset_cpu_time ststs ProloglA 197 LISE PITA T HERITAGE Bolig R gles pr d finies et proc dures externes Que trouve t on dans ce chapitre Ce chapitre regroupe par ordre alphab tique toutes les r gles pr d finies et proc dures externes disponibles en Prolog II On retrouvera la plupart des primitives de Prolog II et Prolog II ainsi qu un grand nombre de nouvelles r gles pr d finies adapt es aux fonctionnalit s sp cifi ques de Prolog III La plupart de ces pr dicats ont d j t abord s dans les chapitres pr c dents Un acc s th matique ce dictionnaire des primitives Prolo
466. tableau tant quelque peu abrupt nous allons aussi pr senter la syntaxe des termes sous une forme plus habituelle dans laquelle les op rateurs compos s et op rateurs isol s f n apparaissent plus en tant que tels mais forment le corps des r gles de grammaire lt terme gt lt terme 1300 gt lt terme 1300 gt lt terme 1299 gt lt syst me de contraintes gt lt syst me de contraintes gt lt syst me de contraintes gt lt terme 999 gt lt terme 999 gt lt terme n gt lt fz n d gt lt terme d gt x lt terme g gt lt zfz n g d gt lt terme d gt a b lt terme g gt lt zf n g gt X lt terme n 1 gt Prolog IA 449 Syntaxes lt terme 50 gt lt terme 49 gt lt terme 49 gt lt suite de termes gt lt terme 49 gt lt terme gt lt suite de termes gt lt suite de termes gt lt terme 999 gt lt terme 50 gt lt terme 49 gt lt terme 2 gt lt variable gt lt constante gt lt lt suite de termes gt gt lt multiplicande gt lt variable gt lt terme 1300 gt lt constante gt lt identificateur gt lt bool en gt lt entier gt lt liste vide gt lt r el gt lt constante caract re gt lt cha fne de caract res gt lt multiplicande gt lt entier gt lt r el gt lt terme 1300 gt lt suite de termes gt 450 lt terme 999 gt lt
467. tangle englobant Le texte est cadr automatiquement en mode paragraphe avec justification gauche s est la variable qui sera unifi e avec la cha ne dit e k Si k est une variable celle ci est unifi e en sortie avec le mode de terminaison 0 si retour chariot 1 si clic souris dans la fen tre en dehors du rectangle d dition 2 si caract re TAB Si k est une constante en entr e sortie imm diate apr s affichage de la zone Une forme plus simple de la r gle est galement utilisable pour une cha ne initiale vide gr_editf lt gt x1 y1 x2 y2 s k get_key c get_key a t m get_key sert prendre un caract re au vol Il n y a aucun cho de ce caract re dans aucune fen tre que ce soit Cette primitive permet donc de saisir un mot de passe Le fonctionnement d taill est donn dans la description de stty get_key c rend dans c un caract re get_key a t m rend trois entiers dans a le code ascii tendu dans t le num ro de touche virtual key code d crit dans Inside Macintosh vol V p 192 dans m l tat des touches de modifications voir la primitive gr_click On pourra lire sa position avec gr_click 0 x y 486 ProloglA Bulag Bolig Primitives graphiques stty USEGETKEY t r glemente d usage du pr dicat get_key t 0 mode par d faut dans lequel get_key choue toujours Les caract res tap s sont ins r s dans les fen tres texte le cas ch ant Da
468. te par une lettre au plus alors qu un identificateur commence par au moins deux lettres La forme pr c dente est sp cifique de la syntaxe de base Dans les deux syntaxes un identificateur abr g peut aussi s crire lt identificateur abr g lt caract re constant sauf gt 11 Voici des exemples d identificateurs corrects pommme pommme xx 1 xx 2 zZ44a 45b c46 en voici d autres qui sont incorrects ce sont en fait des variables t_iti I m happy B29 Termes lt terme gt lt terme gt lt terme gt lt gt lt terme j gt lt terme gt gt lt terme gt lt terme gt lt terme2 gt lt terme2 gt lt terme2 gt lt terme j gt lt terme2 gt x lt termej gt lt terme2 gt lt termej gt lt terme2 gt 434 ProloglA A ne Syntaxes lt terme2 gt lt terme3 gt lt terme2 gt amp lt terme3 gt lt terme2 gt lt terme3 gt lt terme2 gt lt terme3 gt lt multiplicande gt lt variable gt lt terme3 gt lt terme4 gt lt terme3 gt lt terme4 gt lt termes gt lt termes gt lt suite de termes gt lt termes gt lt terme gt lt suite de termes gt liste classique lt suite de termes gt lt terme gt liste classique lt terme4 gt lt termes gt lt termes5 gt lt variable gt lt constante gt lt lt suite de terme
469. termes de la suite s1 Sm t1 tn repr sente un arbre bien d fini 64 ProloglA Doley Bolig Concepts de base Pour r pondre la requ te t tn S la machine partira de l tat initial W to tn S o W est l ensemble des variables qui figurent dans la requ te et passera dans tous les tats qu elle peut atteindre en r p tant l op ration de base ci dessus Bien entendu le choix exprim par la formule 2 n est pas laiss au hasard Prolog II fait en sorte que toutes les r gles soient successivement essay es dans l ordre o elles ont t crites dans le programme Ainsi la machine Prolog III est en r alit la machine d terministe qui produit toutes les ex cutions possibles de la machine non d terministe d finie par les expressions 1 2 3 Chaque fois qu il parviendra un tat de la forme W S c est dire dont la suite de buts est vide Prolog III fournira comme r ponse la solution du syst me S sur l ensemble de variables W Par exemple partir de la requ te tr s simple cadeau_pas_cher X des tats de la machine seront on ne montre pas les tapes promises chouer x cadeau pas cher x utilisation de la r gle cadeau pas cher x gt etc X cadeau x prix xX P P lt 100 cadeau pas cher X cadeau pas cher x qui se simplifie en X cadeau x prix x Pp Ps100 X X 1 Ou tout au moins toutes les r gles rai
470. ternes save 337 set_config 340 echo 341 epsilon_float 342 format_decimal 342 format float 342 format_out_num 341 statistics 342 syntax 342 trace 340 tty_wrap 342 undefined_rule 343 set_configuration 344 set_context 345 set_ident 346 sin 370 size 347 split 348 sqrt 370 state 349 string 350 string_bool 351 string_ident 352 string_integer 354 string_real 355 sub 368 substring 356 sup 369 supe 369 suppress 357 suspend_trace 360 syntax 342 Edinburgh 342 Prolog III 342 sys_command 361 tan 370 trace 340 362 trace_ file 363 ProloglA trunc 364 369 tty_wrap 342 tuple 365 undef_array 366 undefined_rule 343 error 343 fail 343 warning 343 val 367 abs 369 add 368 atan 370 cos 370 div 368 eql 369 exp 370 if 369 inf 369 infe 369 In 370 mod 369 mul 368 rad 370 sin 370 sqrt 370 sub 368 sup 369 supe 369 tan 370 trunc 369 373 LISE PITA T HERITAGE Bolig R gles pr d finies et proc dures externes pour la syntaxe Edimbourg Que trouve t on dans ce chapitre Ce chapitre regroupe par ordre alphab tique toutes les r gles pr d finies et disponibles en Prolog I depuis le seul mode Edimbourg La plupart de ces pr dicats ayant t adapt s aux fonctionnalit s sp cifiques de Prolog II la compatibilit n est pas totale Certains sont des synonymes des primitives d crites dans le chapitre pr c dent d autres sont plus originau
471. tes tre d put s sont dignes d loges 9 Tout individu qui sait garder un secret et qui est sans pr tention est un bienfaiteur du peuple dont le souvenir restera imp rissable 10 Une femme qui rend des services au peuple est toujours populaire 11 Les gens qui valent leur pesant d or qui ne cessent de discourir et dont le souvenir de meure imp rissable sont pr cis ment les gens dont on voit la photographie dans toutes les vitrines 12 Une femme qui n a pas l esprit clair et n a pas re u une bonne ducation est inapte devenir d put 13 Tout individu qui sait garder un secret et qui sait ne pas discourir sans cesse peut tre certain d tre impopulaire 14 Un individu l esprit clair qui a de l influence et l emploie des fins m ritoires est un bienfaiteur du peuple 15 Un bienfaiteur du peuple sans pr tention n est pas le genre de personnes dont la photo graphie est affich e dans toutes les vitrines 16 Les gens qui savent garder un secret et qui emploient leur influence des fins m ri toires valent leur pesant d or 17 Une personne qui ne sait pas s exprimer et qui est incapable d en influencer d autres n est s rement pas une femme ProloglA 143 Les contraintes bool ennes 18 Les gens populaires et dignes d loges sont soit des bienfaiteurs du peuple soit des gens sans pr tention Voici le programme Un premier pr dicat Possibilit lie les vari
472. teur et une mauvaise arit Il faut se mettre en mode undefined_ rule warning ou error 2002 ProloglA Bulag Bolig Outils de mise au point 2 Trace d ex cution Le mode trace est un mode d ex cution permettant de visualiser le d roulement d un programme Prolog II On peut entrer et sortir de ce mode dynamiquement par des appels des pr dicats sp cifiques Il est galement possible de modifier les options de tra age en interrompant l ex cution en cours en changeant les options en question puis en poursuivant l ex cution du programme Ce tra age consiste essentiellement en une suite d impressions sur la sortie courante de trace des contraintes d galit entre buts et t te de r gles avant unification et de visualisation des points de backtracking Ce listing contient des lignes de la forme but tete_de_regle_a_essayer1 indique une tentative lt lt lt lt lt lt c est un chec but tete_de_regle_a_essayer2 une autre tentative autre_but autre_regle l effacement du but pr c dent est un succ s La pr cision de la trace est param trable on peut se placer dans un des trois modes d impression des buts selon la quantit d information que l on souhaite voir d filer l cran e mode1 impression des noms des pr dicats appel s sans leurs ventuels arguments e mode2 impression des appels avec arguments e mode 3 impression des appels avec arguments et de
473. tez cependant que cela n est pas obligatoire et qu on peut utiliser GetArity GetArg et m me PutArg pour manipuler des termes autres que celui de l appel de la r gle externe no_arg est un entier qui lorsqu il est sup rieur ou gal 1 repr sente le rang du fils du terme pr c dent auquel on s int resse que ce soit pour obtenir sa valeur GetArg ou pour la d finir PutArg value donne l adresse de la repr sentation interne d un terme Prolog II provenant g n ralement d un appel d une des fonctions de conversion Convert_StringC_to_StringP Convert_Long IntC_to_IntP Convert _DoubleC_to NumP GetArity term Retourne l arit ou nombre d arguments du terme point par term GetArg no_arg term Retourne un pointeur vers le terme qui est le fils de rang no_arg du terme point par term Il se produit une erreur si cet argument n existe pas indiqu e par le fait que la fonction retourne NULL En outre GetArg 0 term retourne un pointeur vers l tiquette de term PutArg no_arg term value Unifie le terme point par value avec le fils de rang no_arg du terme point par term Il se produit une erreur si un tel fils n existe pas ou si une telle unification n est pas possible En outre PutArg 0 term value unifie le terme point par value avec l tiquette de term 1 Le type adr repr sente l adresse la plus g n rale i e le type char PrologiA 1015 Utilisation de Prolog III sur Macintos
474. tion ne peut servir d buter une requ te 456 ProloglA Bolig Syntaxes Il est important de noter que les seules contraintes qui vont agir sont celles en position indiqu e par les r gles qui pr c dent En effet l int rieur d un terme donc en position de sous terme elles se comportent comme un arbre Il en va de m me avec les op rateurs formant les r gles comme 4 A et Dans ce cas les termes construits sont les suivants construit l arbre sys t1 t2 sys t1 t2 sys t1 t2 Voici quelques exemples de r gles syntaxiquement correctes repas X Y Z hors d oeuvre X plat Y dessert Z add a B lt A B B gt L tuple B num C A B B chats oiseaux pattes tetes C O A4C 2 0 c 0 quelques exemples de requ tes syntaxiquement correctes repas salade viande D repas H sole D H salade sub A B C add C D E 4 A lt 0 E gt 0 circuit B A B C A amp B 456 D gt C D B Rappelons qu une r gle ou une requ te peut tre syntaxiquement correcte sans qu elle soit pour autant valide et accept e par le syst me Prolog III Les restrictions s mantiques par le typage par exemple r duisent fortement les constructions potentielles permises par la syntaxe Quelques remarques Caract re espace Formulons quelques remarques sur le statut du caract re espace Il peut tre ins r partout sans effet de bord sauf l int
475. tion affecte directement le comportement de step Elle n est exploit e que lorsque l option print est mise 1 break valeurs 0 1 valeur par d faut 1 Cette option indique si on permet qu un point d arr t install par les commandes breakat ou spy provoque ou non une interruption du d roulement de la commande en cours La commande next n est pas affect e par cette option breakport valeurs cerfRYN valeur par d faut cerfRYN Indique quels ports la commande next peut arr ter sa progression La syntaxe est du m me type que pour l option printport L autre usage de cette option concerne les point d arr ts la valeur de breakport au moment de l installation d un point d arr t par breakat indique quels ports ce point d arr t peut se r veiller On rappelle que les points d arr ts ne peuvent se r veiller que si l option break est 1 echo valeurs 0 1 valeur par d faut 0 Imprime sur la sortie de trace les commandes qui sont ex cut es prompt valeurs cha ne de 19 car maxi valeur par d faut DBG 1 A moins qu un point d arr t n ai t explicitement install 2024 ProloglA Bulag Bolig Outils de mise au point Cette option contient le prompt utilis e par le d buggeur La cha ne doit tre parenth s e par et si elle contient des blancs ou point virgules comme par exemple set prompt DBG catcherror valeurs 0 1 2 valeur par d faut 2 P
476. trace no_trace set_config suspend_trace ProloglA 331 Bolig R gles pr d finies et proc dures externes retract T Q Fonction Suppression des r gles correspondant un mod le donn Classe Proc dure externe Prolog M II Cat gorie Gestion des r gles et des identificateurs Param tres connus Voir ci apr s Messages d erreur Non Description Recherche et supprime les r gles dont la t te s unifie avec T et dont les buts s unifient avec les l ments de la liste Q Le terme T doit cependant tre suffisamment connu pour qu il n existe aucune ambigu t quant au nom des r gles vis es Exemples toto aa gt toto bb gt toto x gt titi x y tutu z y retract toto X aa bb e e a E i gt list toto x gt titi x y tutu z y gt retract toto aa titi U tutulVll U lt aa y 8 gt V lt z 8 y 8 gt gt list gt Voir galement e suppress assert list rule 332 ProloglA Bolig R gles pr d finies et proc dures externes rule T Q Fonction Recherche de r gles Classe R gle pr d finie Prolog MI Cat gorie Gestion des r gles et des identificateurs Param tres connus sii Messages d erreur R gle inexistante Description Recherche des r gles correspondant un mod le donn Cette primitive s efface autant de fois qu il existe de r gles dont la t te s unifie
477. tre Rend pour b la valeur 0 si le s bouton s de la souris sont relev s au moment de l appel sinon le num ro du bouton press en commen ant par la gauche pour une souris plusieurs boutons le premier bouton a le num ro 1 5 Modes de dessin et d criture X 480 gr_color d c D termine la couleur du fond si d 0 ou du crayon si d 1 de la fen tre graphique courante L argument c est un entier repr sentant une des 8 couleurs possibles parmi les valeurs 33 noir 30 blanc 69 jaune 137 magenta 205 rouge 273 cyan 341 vert 409 bleu gr_color2 f c Impose la couleur f du fond et c du crayon pour la fen tre graphique courante Les arguments f et c sont des entiers repr sentant une des couleurs possibles parmi les valeurs 0 blanc 1 rouge 2 vert 3 bleu 4 rose 5 orange 6 marron 7 rosel 8 violet 9 vert1 10 jaune 11 bleul 12 jaunel 13 magenta 14 cyan 15 noir gr_color3 r v b D finit la couleur du crayon graphique en composantes r rouge v vert b bleu Si les valeurs sont des nombres flottants elles doivent tre comprises entre 0 0 et 1 0 et correspondent des pourcentages d intensit pour chaque composante 0 0 est l absence de cette composante 1 0 est sa pr sence avec une intensit maximale Si les valeurs sont enti res ce sont les valeurs sp cifiques de la machine qui doivent tre utilis es de 0 65535 sur Macint
478. ts qui r gissent l unification de programmer mieux plus clairement plus efficace ment et peut tre de programmer tout court Dans cet ordre d id es de nombreux exemples seront fournis et d velopp s au fur et mesure des besoins rencontr s Prolog III tout comme son pr d cesseur Prolog II a ceci de remarquable qu il poss de un mod le th orique complet qui justifie entre autres que tout programme respectant sa syntaxe est ex cut d une mani re unique et pr visible Le lecteur int ress par les aspects th oriques de la question pourra se r f rer de nombreux articles et ouvrages publi s sur le sujet Toutefois optique relativement informelle qui devrait galement s av rer plus accessible Nous esp rons que les adeptes des pr sentations th oriques ne nous en tiendront pas rigueur Enfin le lecteur peu habitu Prolog pourra se sentir quelque peu mal men par ce manuel dont le but principal est de pr senter Prolog II et la programmation logique par contraintes au d triment quelquefois d une ap proche didactique et circonstanci e des notions couramment utilis es en Pro log L encore un certain nombre d ouvrages dont Prolog chez Inter Editions vous permettront de cerner les notions de base de la programmation logique D cembre 1991 Pr ologlA Quelques mots sur l organisation de ce manuel Il est divis en trois parties le manuel de r f rence les manuels d utilisation et
479. ts qui rendent compte de cette hypoth se On reconna tra le pr dicat au_plus_un_vrai tel qu il a t expos pr c demment au_ plus un vrai X gt ou au plus un vrai X A ou au plus un vrai lt gt 0 gt ou au plus un vrai lt A gt Xx A B gt ou au plus un vrai X B A amp B 0 Le pr dicat suivant d crit les liens qui unissent les pannes et les valeurs d entr es sorties du circuit circuit lt P1 P2 P3 P4 P5 gt lt X1 X2 X3 gt lt Y1 Y2 gt gt au plus un _ vrai lt P1 P2 P3 P4 P5 gt P1 gt ul lt gt X1 amp X3 P2 gt u2 lt gt X2 amp u3 P3 gt Y1 lt gt ul u2 P4 gt u3 lt gt X1 lt gt X3 P5 gt Y2 lt gt X2 lt gt u3 136 ProloglA Bolig Les contraintes bool ennes Les contraintes utilis es d crivent le fait que si une porte n est pas en panne alors le r sultat fourni par celle ci est conforme aux pr dictions que l on est en droit de faire On peut se demander pourquoi on utilise ici une implication et pas une galit quivalence entre les variables repr sentant les pannes pour une porte donn e et les expressions qui en expriment le bon fonctionnement On op re ainsi pour traduire le fait qu une porte peut tre en panne et fournir pour un jeu de donn es pr cis une r ponse correcte l exemple typique est celui d une porte qui renvoie toujours la m m
480. ttant de cr er et activer les dialogues d crits par le deuxi me argument d Dans sa deuxi me forme la primitive gr_dialog accepte un argument suppl mentaire p permettant de param trer la position de l angle sup rieur gauche du dialogue sous la forme d un doublet lt x y gt d est soit un arbre d crivant un dialogue soit l identificateur d une r gle unaire avec un tel arbre en argument 11 est une liste ventuellement vide de paires nom_de_ zone valeur_initiale o nom_de_zone repr sente un identificateur ou une constante Cette liste est utilis e pour d finir ou red finir le contenu des zones 12 En sortie si 12 est une variable elle est unifi e avec la liste des paires nom_de_zone valeur_finale du dialogue Si 12 est une liste de paires nom_de_zone X chaque paire est unifi e avec le couple correspondant Un dialogue est d crit avec des objets primitifs zone de texte zone d dition boutons et des primitives d agencement en colonne ou en rang e Ces primitives r alisent un ajustement dynamique de la taille des zones en fonction de leur contenu Les zones dont la valeur peut tre modifi e sont identifi es par un nom ce qui permet de red finir leur valeur au moment de l appel Exemple PrologIA 497 Bolig Primitives graphiques gt reload dial mo3 gt gr_dialog Hello buttonD OK L gt gr_dialog lt 50 50 gt Name editf 10 field1 buttonD O0
481. u de reproduction de ces donn es L acheteur a toutefois droit la garantie l gale dans les cas et dans la mesure seulement o la garantie l gale est applicable nonobstant toute exclusion ou limitation Droits d auteur Ce manuel et le logiciel qu il d crit sont prot g s par les droits d auteur Au terme de la l gislation traitant de ces droits ce manuel et ce logiciel ne peuvent tre copi s ou adapt s en tout ou en partie sans le consentement crit de ProloglA sauf dans le cadre d une utilisation normale ou pour faire une copie de sauvegarde Ces exceptions n autorisent cependant pas la confection de copies l intention d un tiers que ce soit ou non pour les vendre Prolog III est une marque d pos e de ProloglA D cembre 1990 Pr ologlA Bolig Bolig Utilisation de Prolog Ill sur Macintosh Installation de Prolog III Utilisation de Prolog III A propos de l environnement Ajout de r gles Appel de Prolog III depuis le langage C DURE UD Que trouve t on dans ce chapitre Ce chapitre explique toutes les caract ristiques du syst me Prolog II qui d pendent de la machine utilis e ou de son syst me d exploitation Il y est question principalement de la proc dure d installation du syst me Prolog III et des particularit s de son activation param tres d ex cution tailles des espaces etc Ce chapitre explique aussi comment ajouter Prolog III travers C vos propres r gles p
482. u 1 et ceci pour chacun des radio boutons du groupe rb1 lt g i gt rb lt g i gt v M me chose que rb mais avec deux diff rences les l ments du groupe ne peuvent tre tous z ro seul l l ment ayant la valeur 1 figure dans la liste de sortie nom_de_zone est alors repr sent par g et valeur_finale par i Ce format de sortie est donc diff rent et plus simple que celui fourni par rb editf n i editf n i s D crit une zone d une ligne de texte ditable de nom i o i est un identificateur s repr sente la valeur initiale de la zone d dition Cette valeur initiale est la cha ne vide si elle n est sp cifi e ni en argument ni dans la liste 11 L entier n repr sente le nombre minimum de caract res de la zone Si s est plus grand la zone est dynamiquement tendue 1 Contrairement Prolog II le doublet lt g i gt ne repr sente pas le m me arbre que g i ProloglA 499 Primitives graphiques 500 button s i D crit un bouton avec le label s auquel est associ l action d finie par l identificateur i Lorsque le bouton est activ une action est r alis e Siiest fail le dialogue est termin et gr_dialog choue Siiest rien n est fait Sinon le but i l est activ l tant la liste binaires des paires nom valeur des zones du dialogue au moment o le bouton est cliqu Lorsque le but correspondant la r gle lt i 1 gt a t ex cut la gesti
483. u la zone m moire dont value est l adresse get_string no_arg value err Copie la cha ne de caract res originale depuis la m moire de travail de Prolog dans une variable ou zone m moire d finie dans le programme externe Un caract re nul indique la fin de la cha ne La zone d accueil doit tre de taille suffisante pour contenir les caract res et le caract re nul Transfert de donn es simples de C vers Prolog Ces fonctions sont appel es par le programme externe pour unifier une valeur avec un argument de la r gle externe Si l unification choue un backtracking est automatiquement g n r par la fonction de com munication Voici les fonctions disponibles put_integer no_arg value err int no_arg long value int err put_real no_arg value err int no_arg float value int err put_string no_arg value err int no_arg char value int err no_arg est un entier donnant le rang de l argument dans l appel de la r gle externe Si la valeur effective de no_arg ne correspond pas un argument effectif dans la r gle externe alors il se produit une erreur value est la valeur devant tre unifi e sur l argument de rang no_arg dans la r gle externe 1020 ProloglA Bolig Pelog Utilisation de Prolog III sur Macintosh Pour les param tres de type cha ne de caract res value est l adresse d une cha ne de caract res termin e par z ro d finie dans le programme externe put_st
484. uble signe et on code le doublet de base te1 e2 par l arbre 1 e1 e2 Par cons quent les expressions ci dessus sp cifient respectivement les arbres 1 1 e1 1 2 1 en 1 1 e1 res a DI n 9 409 M me si les tuples de Prolog III sont une am lioration indiscutable des listes classiques toutes les r gles pr d finies de Prolog II qui sont h rit es de Prolog I n utilisent que ces derni res afin de ne pas changer de compor tement 1 Nous disons ici classiques par opposition aux nouvelles listes que sont les tuples mais dans la suite de cette documentation nous appellerons les listes classiques tout simplement des listes ou bien encore des listes binaires 2 Ces listes ne peuvent pas tre exprim es en Prolog II avec la syntaxe qu elles ont en Prolog II c est dire 41 42 an le point ayant ici un tout autre r le syntaxique il exprime la concat nation ProloglA 33 Concepts de base 4 Variables Les variables ne sont pas d autres l ments du domaine de Prolog II dont on n aurait pas encore parl et qui existeraient en plus des arbres Essentiellement les variables sont une autre mani re de repr senter les arbres ainsi qu il d coulera des explications suivantes Du point de vue de la syntaxe le principal signe de reconnaissance d une variable est d avoir pour nom une suite de lettres de chiffres et des deux caract res apostrophe e
485. ue deux tiquettes soient gales il faut qu elles soient de m me type deux identificateurs deux nombres deux caract res etc qu elles soient gales pour les crit res d galit propres leur type Pour l essentiel ces crit res sont les suivants identificateurs deux identificateurs sont gaux si leurs formes non abr g es s pellent exactement de la m me mani re On notera bien qu il n y a pas d quivalence entre les lettres majuscules et les minus cules La forme non abr g e des identificateurs est expliqu e au chapitre Le contr le et l environnement des programmes caract res deux caract res imprimables internationaux sont gaux si leur forme crite est la m me ce qui quivaut dire qu ils ont la m me repr sentation interne code ASCII Pour les caract res nationaux ou les caract res non imprimables il y a lieu de se r f rer la documentation particuli re du syst me Prolog II utilis nombres rationnels L galit entre nombres entiers est une notion primitive h rit e des math matiques qui ne pose aucun probl me En ce qui concerne les nombres fractionnaires si l on sait que Prolog II les conserve en pr cision infinie et sous leur forme irr ductible l encore l galit ne pose aucun probl me ProloglA 51 Concepts de base nombres flottants L galit entre deux nombres flottants x et y ou entre deux nombres x et y dont l un
486. ues On rappelle que les caract res sont not s entre anti quotes voir exemples 1 ci dessus C est la raison pour laquelle l exemple 3 choue est un identificateur quot Pour v rifier que C est un caract re connu utiliser char C Voir galement e char string is_string ProloglA 277 Ed L a La Ed ol R gles pr d finies et proc dures externes ee is _ ident I Fonction V rifie que I repr sente un identificateur Classe R gle pr d finie Prolog II Cat gorie V rification de types Param tres connus Aucun Messages d erreur Non Description V rifie que le terme I repr sente un identificateur connu c est dire que la contrainte I lid appartient au syst me courant Echoue dans le cas contraire Exemples is ident gwendoline is ident ceci en est un aussi is ident l is ident I I idt Remarques Dans le second exemple ceci en est un aussi est un identificateur quot et le but est ex cut correctement Voir galement o ident 278 ProloglA Bolig R gles pr d finies et proc dures externes is_leaf T Fonction V rifie que T repr sente une feuille Classe R gle pr d finie Prolog III Cat gorie V rification de types Param tres connus Aucun Messages d erreur Non Description V rifie que le terme T repr sente un arbre r duit une feuille c est dir
487. ues Voici quelques exemples de contraintes num riques correctes e 2X 3 0 e X 5 3 2X 1 2 X 1 Y 9 1 lt 4X 1 lt 9 ProloglA 101 Les contraintes num riques Restrictions La principale restriction portant sur les contraintes num riques r side dans le fait que pour des raisons d efficacit videntes seules les quations et in quations lin aires sont prises en compte par les algorithmes de r solution de Prolog III De ce fait le traitement de toute contrainte contenant une multiplication de deux variables ou une division par une variable est retard jusqu ce que le nombre de variables connues soit suffisant pour rendre la contrainte lin aire Dans la majorit des cas cette lin arit sera obtenue d s l unification Nous examinerons en d tail le processus mis en place dans les autres cas dans un chapitre sp cialement consacr ce sujet Une autre restriction importante est que l on ne peut en Prolog II imposer un terme de repr senter une valeur enti re Une fa on de traiter les entiers consiste d finir des ensembles de contraintes portant sur des nombres rationnels et en fin de traitement d effectuer une num ration enti re des valeurs possibles de ces variables gr ce la r gle pr d finie enum voir le chapitre R gles pr d finies et proc dures externes Forme normale Nous voquons ici la forme normale utilis e pour le codage les contraintes num riques afin d
488. umt qui impose la variable x de repr senter un arbre tiquet par un nombre r el ou rationnel Syntaxiquement on remarquera qu il n est pas autoris d ins rer comme dans toutes les relations unaires de typage un espace entre le et numt X num qui est quivalent l association des deux contraintes x numt et x 0 Relations binaires z galit in galit lt inf rieur strict gt i sup rieur strict inf rieur ou gal A Il gt sup rieur ou gal 100 ProloglA Bulag Bulag Les contraintes num riques Contraintes num riques Les contraintes num riques sont des objets syntaxiques qui expriment dans le cas des relations binaires la mise en relation de deux expressions num riques L utilisation de contraintes unaires induit elle un typage des variables consid r es A propos de types on notera la propri t suivante la seule pr sence d une variable dans une expression num rique contraint celle ci repr senter une valeur num rique Par exemple la contrainte x v 2z est en fait cod e sous la forme suivante Y Inum Z Inum X y 2Z le terme figurant gauche de l galit x n tant pas une expression num rique aucun typage particulier n est effectu et du point de vue du typage la variable x repr sente un arbre quelconque m me si pour v rifier cette galit x est contraint repr senter un nombre Exemples de contraintes num riq
489. us S au moins un parmi I et N Message d erreur Module inexistant Description Enl ve tout point espion install sur un ou plusieurs paquets de r gles Dans la premi re forme I d signe l identificateur de paquet et N l arit de ce paquet et au moins l une des deux informations doit tre connue l appel Un chec survient dans le cas contraire Dans la deuxi me forme S est un nom de module sous la forme d une cha ne de caract re Toutes les r gles du module S sont alors concern es Provoque une erreur s il n existe aucune r gle de pr fixe S L utilisateur se r f rera au manuel Mise au point de programmes Prolog III pour de plus amples informations Voir galement spy e debug no_debug ProloglA 303 ii Ed L ka Ed ANA R gles pr d finies et proc dures externes n no trace Fonction Annule la trace Classe Proc dure externe Prolog M II Cat gorie Environnement Param tres connus Aucun Messages d erreur Non Description Annule l effet des primitives trace ou de toute trace provoqu e par l utilisation de la primitive set_config Revient au mode normal d ex cution d un programme Prolog III Voir galement e trace debug no_debug suspend_trace resume_trace e set_config set_configuration get_config get_configuration 304 ProloglA Bolig R gles pr d finies et proc dures externes not T Fonction N gation par
490. ut de la cha ne s2 dans la cha ne s Si la cha ne s2 n est pas trouv e ou si s1 ets2 ne sont pas enti rement connues alors find pattern choue substring S1i N1 N2 S2 Pose la contrainte s2 s1 o s1 est la sous cha ne de s1 commen ant la position n1 de longueur N2 Echoue si une telle sous cha ne n existe pas ou si s1 n est pas connue ProloglA 85 Arbres tuples cha nes et listes Conversions de cha nes list string L S Pose la contrainte s L o L est une cha ne compos e des caract res qui forment la liste L Echoue si la liste amp n est pas enti rement connue string ident P S I e Sir est connu pose l ensemble de contraintes s s p p o s est une cha ne compos e des caract res de la repr sentation abr g e de l identificateur 1 et P une cha ne compos e des caract res formant le pr fixe de l identificateur 1 e Si s et P sont connus pose l ensemble de contraintes I 1 o 1 est un identificateur compos des caract res de la cha ne repr sentant son pr fixe r et de celle repr sentant sa notation abr g e s string integer S N e Si s est connu pose l ensemble de contraintes N s o s est un entier form partir des caract res de la cha ne s e Sin est connu pose l ensemble de contraintes s N o N est une cha ne form e des caract res qui composent l entier N string real S F e Si s est connu pose l ens
491. ut est b 0 Sib 1 un bitmap de rafra chissement de la taille de la fen tre est cr X Sib 1 un bitmap de rafra chissement de la taille de l cran est cr lt FONTSIZE n gt D finit la taille de la police de caract res utilis e dans une fen tre de texte lt FONT n gt D finit le num ro n de la police de caract res utilis e pour le texte d une fen tre type texte La fonte associ e n est d pendante du syst me h te v est un entier 1 ou 0 indiquant si la fen tre doit tre visible 1 ou pas 0 Les quatres derniers param tres que l on peut remplacer par l arbre r sont x1 y1 qui repr sentent les coordonn es du coin sup rieur gauche de la partie dessinable de la nouvelle fen tre par rapport l cran ProloglA Bolig A e e o Primitives graphiques x2 y2 qui repr sentent les coordonn es du coin inf rieur droit de la partie dessinable de la nouvelle fen tre l origine tant situ e au coin sup rieur gauche de l cran Exemple de cr ation d une fen tre graphique avec sauvegarde automatique gt new_window query GRAPHICS lt SAVE 1 gt Limitations On ne peut ouvrir simultan ment plus de 28 fen tres sachant que dans l environnement disponible sous XWindows ou SunView un menu compte pour une fen tre et une ic ne compte double save window s1 s2 save window s1 Sauve le contenu de la fen tre de
492. ux de la boite courante Avec arguments d crit le paquet identificateur arit spy Dessert 2 Il est galement possible d ajouter des points espions avec la primitive Prolog III spy ProloglA 2015 Outils de mise au point nospy tous ports SYNTAXE nospy nospy identificateur arit DESCRIPTION Cette commande permet d enlever tous les appels un paquet de r gle Sans arguments le nom et l arit du paquet de r gles correspondent ceux de la boite courante Avec arguments d crit le paquet d crit par le couple identificateur arit nospy Dessert 2 Il est galement possible d enlever des points espions avec la primitive Prolog II no_spy breakat tous ports SYNTAXE breakat breakat n boite breakat niveau n _litt ral DESCRIPTION Cette commande permet de surveiller un appel de la d monstration courante en y mettant un point d arr t Sans arguments met un point d arr t sur la boite courante Avec un argument met un point d arr t sur la boite n _boite Avec deux arguments d crit l appel surveiller en donnant en coordonn es cart siennes sa localisation dans l affichage produit par la commande ls ou locus Dans cet affichage niveau d crit est le nombre indiqu en d but de chaque ligne et n _1itt ral est le nombre de termes compt s partir de la gauche la t te de r gle tant comprise et en position 1 2016 ProloglA Bulag Bol
493. vers PEV amp amp Convert NumP to ExtendedC t amp b amp amp t GetArg 3 Ptr vers PEV amp amp Convert NumP to ExtendedC t amp c amp amp real roots a b C amp x amp y amp amp t Convert ExtendedC to NumP x amp amp PutArg 4 Ptr vers PEV t amp amp t Convert ExtendedC to NumP y amp amp PutArg 5 Ptr vers PEV t FALSE TRUE 4 Modifier la commande Link dans le fichier prolink3 pour tenir compte du nouveau fichier faites attention ne pas laisser de blanc apr s le caract re k Link p d c PRO4 t APPL o Prolog III new b sn edit Main myproc c o prolog3 o userRule c o promain c o Libraries RunTime o Libraries interface o CLibraries CRuntime o CLibraries StdCLib o CLibraries CInterface o CLibraries Math o CLibraries CSANELib o Setfile a B Prolog IIl new 5 Refaire la compilation de userrule c et l dition de liens de Prolog III make f prolink3 gt tmp tmp 6 Lancer une session Prolog II utilisant le nouvel ex cutable et l ancien tat initial d finir le nom de la nouvelle primitive et l ajouter la partie ferm e de la famille sys PrologilA 1023 Utilisation de Prolog III sur Macintosh Pl PROLOG III v1 2 Decembre 1990 C PrologIA 1989 90 gt set ident sys roots 504 gt add implicit sys roots gt 7 Essayer la nouvelle r gle gt roots 1l 5 6 x
494. voir exemples ProloglA 501 Bulag Primitives graphiques En sortie du dialogue le r sultat est donn par un couple Identificateur ListeDesItemsS lectionn s o ListeDesItemsS lectionn s est form e partir de ListeInit et de NoSelectionn s userltem t i e s Permet d tendre les items trait s par un dialogue L utilisateur doit alors fournir un paquet de r gles lt i 2 gt capable de r pondre un certain nombre d actions requises par le gestionnaire de dialogue qui prend en charge la gestion des v nements et des activations Les param tres ont la signification suivante t Terme identifiant l item en question et utilis comme nom de zone si la valeur est extractible Identificateur d une r gle deux arguments crite par l utilisateur pour g rer les actions concernant cet item voir plus loin les actions possibles Valeur d crivant l tat de l item et g r e par l utilisateur lors des actions D crit le type d actions possibles sur cet item 0 insensible 1 activable par un clic 2 activable par un clic ou une entr e de texte TAB Les primitives d agencement sont bas es sur la notion de combinaison de rectangles mettre deux rectangles en colonne d finit un nouveau rectangle englobant les deux autres col 1 ou 1 D crit une colonne align e gauche dont le contenu est d crit par l Si l est une liste la primitive calcule la taille de chaque l ment
495. voir l ensemble obtenu en donnant toutes les valeurs possibles aux variables qu il contient Ainsi le terme donn en exemple ci dessus repr sente l ensemble infini de tous les tuples de deux nombres Cet ensemble est identique celui d fini par le terme lt x Y gt et n a aucun l ment en commun avec les ensembles d finis par les tuples lt x gt ou lt X Y Z gt Nous retrouvons bien entendu les deux cas extr mes des termes un terme r duit une variable repr sente l ensemble de tous les arbres tandis qu un terme sans variable repr sente l ensemble r duit l unique arbre dont le terme en question est l expression crite 46 ProloglA Bulag Bolig Concepts de base Affectation Attardons nous un instant sur le concept donner des valeurs aux variables d un terme pour un peu mieux le formaliser cela nous servira plus tard comprendre ce qu est la r solution d un syst me de contraintes Nous avons d j dit qu une variable pouvait repr senter n importe quel l ment du domaine de Prolog II d finir une affectation d un ensemble de variables c est tout simplement choisir une valeur pour chacune des variables en question Si l ensemble est V x1 X2 Xn alors une affectation de cet ensemble sera un ensemble de couples x ai not s plut t x lt ai comme A x1 41 X2 42 Xn An signifiant l arbre 41 est donn pour valeur la variable x1 l arbre
496. x D cembre 1990 Pr ologlA R gles pr d finies Edimbourg Identificateur Arit Il est coutume en syntaxe Edimbourg de trouver au niveau de la gestion des r gles des termes de la forme I N I repr sentant un identificateur et N un entier d signant une arit Pour des raisons videntes il est impossible en Prolog III de former de tels termes il n est pas possible de diviser un identificateur par un entier Il nous faut donc une autre convention pour d signer ces termes La notation de tuple a t pr f r e On d finira donc le couple ident arit par lt ident arit gt R gles sous forme de termes On manipule parfois les r gles en tant que termes la plupart du temps au sein de primitives de gestion de r gles Dans ces cas l il faut se souvenir que les r gles Prolog II ont quatre formes possibles tete 1 tete contraintes 2 tete but but 3 tete but but contraintes 4 et que l op rateur compos est l op rateur principal dans les formes 2 et 4 376 ProloglA Bolig Bolig R gles pr d finies Edimbourg abolish I abolish lt I A gt Fonction Suppression d un paquet de r gles Classe Primitive Edimbourg Cat gorie Gestion des r gles et des identificateurs Param tres connus L argument doit tre un identificateur connu ou un tuple lt ident connu Arit connue gt Message d erreur Non Description
497. xpressions bool ennes 43 120 expressions num riques 42 99 flottants 40 freeze 149 identificateurs 38 listes 84 modules 186 r gles 61 requ tes 61 termes 38 45 utilisation de la coupure 164 exemples de programmes additionneur binaire 135 au plus un vrai 131 calcul bancaire 108 calcul des feuilles 87 ChatsOiseaux 15 crible d Eratosth ne 90 element_de 13 K l ments vrais 133 naive reverse 82 puzzle logique 143 quick sort 87 remplissage d un rectangle 110 RepasLeger 9 SEND MORE MONEY 109 suite p riodique 89 un ou sur 2 variables 129 un ou sur une liste 130 exit 198 247 exp 172 370 expressions bool ennes 43 119 437 num riques 42 97 436 maximum 105 minimum 105 pr dicat val 168 F fail 249 faits vrais 62 famille 178 partie ferm e 178 Fdecimal 108 PrologiA 549 Index Pely fen tre graphique courante 473 feuille 21 Fexact 108 Ffloat 108 file 497 file_window 466 fin de session quit 11 find 497 find_pattern 85 251 findall 250 Fint fract 108 Fnormal 108 fonctions valuables 170 FONT 469 471 fonte 472 482 483 484 FONTSIZE 468 471 format_decimal 342 format_float 342 format_out_num 108 341 Fdecimal 341 Fexact 341 Ffloat 341 Fint fract 341 Enormal 341 formats d entr e sorties 108 forme clausale 124 forme normale contraintes bool ennes 123 contraintes num riques 102 forme normale conjonctive 123 formfeed 431 free 149 168 252 free_label 253 fr
498. xternes bool B Fonction V rification bool enne Classe R gle pr d finie Prolog II Cat gorie V rification de types Param tres connus B Messages d erreur Aucun Description Cette r gle pr d finie v rifie que B est un terme repr sentant une valeur bool enne connue Si ce n est pas le cas bool B choue Exemples bool 1 bool A amp B bool A 1 A bool bool A A B At dr B bool bool 2 Remarques Cette r gle pr d finie ne teste pas seulement que B repr sente une valeur bool enne la r gle pr d finie is_bool B effectue cette v rification Le terme B peut tre contraint repr senter une valeur bool enne connue dans le cas o pour toutes les solutions du syst me de contraintes courant B repr sente la m me valeur voir le troisi me exemple ci dessus 214 PrologiA Bolig R gles pr d finies et proc dures externes bound T Fonction V rifie que T repr sente un terme suffisamment connu Classe R gle pr d finie Prolog III Cat gorie Contr le Param tres connus Aucun Messages d erreur Non Description Ce pr dicat s efface si T est un terme repr sentant un arbre dont e L tiquette initiale est connue e Le nombre des fils est connu Voir la section Termes connus du chapitre Retardements pour plus de d tails Exemples bound 1l bound 123 456
499. xternes L div N1 N2 N3 Fonction Division enti re Classe Proc dure externe Prolog II Cat gorie Contraintes num riques Param tres connus N1 et N2 entiers N2 ne doit pas tre nul Messages d erreur Division par z ro Description Pose la contrainte N3 D o D est le r sultat de la division enti re de la valeur absolue de N1 par la valeur de N2 On prendra garde ne pas confondre le pr dicat avec la fonction valuable du m me nom voir la r gle pr d finie val Exemples gt div 9 2 N gt div 7 N1 N2 gt Voir galement e mod e frunc 238 ProloglA Bolig R gles pr d finies et proc dures externes dot T Fonction V rifie que T repr sente une liste binaire non vide Classe Proc dure externe Prolog M II Cat gorie V rification de types Param tres connus T qui doit repr senter une liste binaire Messages d erreur Non Description V rifie que le terme T repr sente une paire point e Echoue si T est libre ou T ne repr sente pas une liste ou T PrologIA 239 2 gens 2 Boli R gles pr d finies et proc dures externes L echo Fonction Echo sur la console Classe Proc dure externe Prolog M I Cat gorie Entr es sorties Param tres connus Aucun Messages d erreur Non Description Provoque l affichage sur l unit courante de sortie de toutes les r gles ou requ te
500. y x 2 y 3 gt roots 1 4 8 x y gt 8 Sortir de Prolog III en sauvant l tat courant Celui ci devient l tat initial pour les futures sessions Prolog III gt exit initial3 psv 1024 ProloglA e Utilisation de Prolog III sur Macintosh 6 Appeler Prolog Ill depuis le langage C Introduction Appeler Prolog III depuis C se fait de fa on simple puisque trois fonctions C autorisent ce m canisme De par la n cessit d allouer et d initialiser ses propres donn s Prolog III ne pourra tre appel qu une fois la fonction Pro3Initial ex cut e Les appels Prolog II se font ensuite par l usage de la fonction g n rique Pro3Goal qui envoie Prolog III une commande sous la forme d une cha ne de caract res Dans le cas o on n aurait plus besoin de Prolog II dans la suite de l ex cution la fonction Pro3Final peut tre appel e celle ci permet notamment de r cup rer la place m moire occup e par la session Prolog IM On ne pourra plus partir de ce moment l appeler Prolog III moins de recommencer le processus en utilisant nouveau Pro3lnitial etc Description des fonctions Initialisation int Pro3lnitial argc argv autoprolog int argc autoprolog char argv argc argv ont la m me s mantique que les arguments de la fonction main de tout programme C Ils servent passer des options Prolog III Dans le cas o on ne souhaite pas utiliser c
501. yed mult X Y Z A 156 ProloglA Bulag Bolig Retardements freeze Y delayed_mult Y X Z A delayed_mult X Y Z A gt known A delayed_mult X Y Z l1 gt bound_mult X Y Z delayed_divide X Y Z gt delayed_mult Z Y X Y 0 Dans le cas de la multiplication il faut retarder le traitement de la contrainte jusqu ce que l une ou l autre des variables X et Y soit connue On installe donc un double freeze sur les deux variables X et Y Le pr dicat delayed_mult permet gr ce l utilisation d une variable de communication de ne pas ex cuter delayed_mult deux fois dans le cas o il existe une tape o les deux variables sont connues En effet la premi re ex cution de delayed_mult chouera sur la premi re r gle A n tant pas connu et apr s mise en place de la contrainte affectera A 1 for ant par l m me les appels suivants ex cuter la premi re r gle qui n installe pour sa part aucune contrainte La division est construite naturellement en utilisant le pr dicat delayed_mult Concernant le traitement retard des contraintes num riques non lin aires on retiendra pour finir la d finition informelle suivante Dans le traitement des expressions num riques non lin aires tout se passe comme si toute contrainte de la forme Z E E o E et E sont des expressions contenant des variables tait transform
502. ypes 532 R gles pr d finies Edimbourg 533 Arbres listes cha nes et tuples 533 Controle yerin a en one sites 533 Evaluation de fonctions pr d finies 533 Entr es SOS eruginn aasien nr lte neue Miele 534 Gestion des r gles et des identificateurs 534 V rification de types 534 C Quelques programmes Prolog III en syntaxe Edimbourg 535 1 Un petit exemple Men pen ane 536 L propramMmMme epora ae a eE E E EE EEEE EEEE 536 Une OUeSHON ae an h aae a ra eaae e MR En en ln 536 2 Calculs sur les grands nombres fact p3e 537 Le programme 4 4444 iii 537 Q sti ns Auriane rte dre ni ent late dede destin iae line trs 537 3 Calculs bancaires DA Does an en datasanmss 538 Le programme ss 538 Questions pos es avec des nombres entiers ou flottants 538 4 Manipulation d arbres leaves po sies hum 539 xX ProloglA Pay Table des mati res L programmi Finn hr int a 539 OU SHONSE rende EE anne ont et ded liens nets toile aime 539 5 Urnpeu d logigu god pesant 540 E programme ii nesan a enas Mt Ear a AAA Na SEA 540 Arqueston sir hs den a E A E ERE aS 540 6 Un probl me de Lewis Caroll lewis p3e 541 Ee programme issus
503. zarres et examinons les deux contraintes x v 1 CEES 2 Le syst me 1 est quivalent x num Y boo1 En effet les op rateurs pr sents imposent ces types aux variables x et y et la relation n ajoute rien puisque pour tout nombre n et tout bool en b on a n b Pour la m me raison le syst me 2 est insoluble Signalons pour terminer que les expressions X xX 1 x x 2 seront rejet es par l analyseur de Prolog II Bien que d un point de vue strictement syntaxique elles soient correctes comme il n existe aucun arbre qui soit simultan ment num rique et bool en il n existe donc aucune affectation qui transforme ces contraintes en des conditions v rifi es sur des arbres ProloglA 59 Bolig Concepts de base 9 R gles et requ tes Syntaxe Nous en arrivons enfin aux programmes Prolog III Ceux ci sont constitu s de r gles chacune comporte une t te qui est un terme et une queue form e d une suite de buts et d un syst me de contraintes La suite de buts peut tre vide le syst me de contraintes aussi Quand le syst me de contraintes est vide il peut tre omis lt r gle gt lt t te gt gt lt but gt lt syst me de contraintes gt lt requ te gt lt but gt lt syst me de contraintes gt lt but gt i lt terme gt lt t te gt lt terme gt Voici des exemples de r gles correctes repas X Y Z
504. ze T N Fonction Taille d un terme Classe R gle pr d finie Prolog II Cat gorie Arbres listes cha nes et tuples Param tres connus N ou la taille de T voir ci dessous Messages d erreur Non Description Pose la contrainte T N si N est un entier positif ou bien la contrainte N Kk siT est un terme ayant un nombre connu k de fils Echoue dans les autres cas Exemples gt bound size lt 1 2 3 4 gt N bound size c est tout N 11 bound size U 2 U X1 X2 X2 2 bound size U N Dans cet exemple nous avons renomm les variables interm diaires cr es par Prolog II 218 ProloglA Bolig R gles pr d finies et proc dures externes bound_tree T Fonction V rifie que T repr sente un arbre unique Classe R gle pr d finie Prolog II Cat gorie Arbres listes cha nes et tuples Param tres connus Aucun Messages d erreur Non Description V rifie que T repr sente un arbre unique c est dire que le terme T ne comporte aucune variable Remarque T ne doit pas repr senter un arbre infini Si c est le cas utiliser la primitive bound_tree Exemples bound tree lt 1 2 3 4 gt bound tree c est tout bound tree E U U 4 Voir galement e free free_label known bound bound _tree PrologIA 219 2 gens 2 Bol R gles pr d finies et proc dures externes L
Download Pdf Manuals
Related Search
Related Contents
InLine 69915N RoHS 外1『賓起物規制にも対応。 付属のア ,`で 難防止寅1策も。 Anderson Manufacturing G.V.W.R.-3500 User's Manual Lèpre: note soumise par la délégation de l`Inde XC-HM81-S/-K X-HM81-S/-K X-HM71-S/-K P2832 Thinning Pine Trees by the Leave Tree Method Copyright © All rights reserved.
Failed to retrieve file