Home

Prolog II - Colmerauer, Alain

image

Contents

1. 2 integer_number i term AE we EXPT 999 listexpr EXPFo99 EXPTo99 Quand Prolog est lanc la machine est pr te ex cuter un programme elle attend un ferm Quand Prolog est pass dans un mode de compilation c est dire un mode d insertion de programme cf chapitre 3 de ce manuel Prolog attend alors un program Notes 0 D finit la syntaxe en mode Prolog II 1 D finit la syntaxe en mode Edinburgh 2 expr repr sente la suite de r gles expry eXpTjo99 en syntaxe Prolog I et expr XPT1200 En Syntaxe Edinburgh 3 La r gle 7 2 exprime une syntaxe alternative pour les r f rences aux composantes des tableaux qui permet un acc s optimis Par exemple si fable est le nom d un tableau d fini par l emploi de la r gle pr d finie def array alors les deux expressions table 10 et table 10 sont quivalentes Cependant le compilateur traduit la deuxi me forme de mani re plus efficace ProloglA R 1 22 1 9 2 Manuel de R f rence 4 Les r gles 7 3 et 7 4 d finissent deux syntaxes alternatives pour les tuples En syntaxe Edinburgh seule la deuxi me alternative est possible On a donc les quivalences lt x y gt lt gt x y 5 La r gle 7 5 permet de d crire des grammaires non contextuelles en vue d crire en Prolog des analyseurs syntaxiques 6 En syntaxe Prolog II les r gles 4 d une part et 7 6 8 1 et 8 2 d autre part
2. caract res accentu s Une option de comportement cf 2 3 du manuel d utilisation d finit le mode de lecture du caract re Lorsque l interpr tation du est active les r gles sont annot es par il lorsqu elle ne l est pas les r gles sont annot es par 10 Les r gles ainsi annot es sont exclusives Leur validit d pend de l option choisie Les notes ci apr s sont valides uniquement lorsque l interpr tation du est active 1 Il existe un mode d ex cution Prolog cf U2 3 dans lequel les accent _escape ne sont pas permis et sont remplac s par les format _escape dans ce mode ces r gles C2 2 C10 3 C11 ne sont pas valides Sinon les accent _escape peuvent toujours tre utilis s en entr e pour sp cifier des caract res accentu s En sortie ProloglA Bulag R1 28 Manuel de R f rence HERITAGE Prolog utilise un accent_escape pour les caract res accentu s du jeu ISO 8859 1 n existant pas dans le jeu de caract re du syst me h te 2 De la m me mani re que pour les accent_escape les format _escape peuvent toujours tre utilis s en entr e pour sp cifier un caract re En sortie Prolog utilise un format_escape pour les caract res n existant pas dans le jeu de caract re du syst me h te et ne pouvant tre repr sent s par un accent_escape en mode h te par exemple 3 Le caract re dans un accent _escape repr sente le diacritique tr ma cano e lt gt cano Table 1
3. tout moment les r gles n existent qu en un seul exemplaire soit comme code Prolog soit comme source Prolog si une interruption utilisateur survient l espace du code sera tout de m me modifi de fa ons diff rentes en fonction du moment de l interruption l dition de r gles non visibles provoque la suppression de ces r gles mais ne les fournit pas sous forme de source 6 3 1 Modifier des paquets de r gles Cette commande provoque l dition des paquets de r gles list s en argument A la fin de l dition les paquets dit s sont r ins r s la place des paquets originaux Les paquets peuvent appartenir plusieurs modules diff rents c est alors le contexte de lecture criture du module du premier paquet qui est utilis ProloglA J Prolog LIE PIT AZT AEN AGE L environnement R6 3 edit i a edit l i a repr sente le paquet de r gles dont l acc s est l identificateur i et le nombre d arguments est a est une liste termin e ou non par nil d l ments i a Au retour d un appel de l diteur r sident Prolog peut d celer une erreur de syntaxe dans les r gles que vous venez d diter Il affiche alors un message avec le num ro et le contenu de la ligne contenant l erreur le diagnostic correspondant et vous demande si vous d sirez recommencer le cycle d dition et compilation afin de corriger la faute ou abandonner L abandon provoque le retour prolog les r gles non ins r
4. W X sit t1 fn Si et 2 sont des termes alors les formules ft 42 et t1 t2 sont respectivement une quation et une in quation Un ensemble S de telles formules est un syst me d quations et d in quations L affectation sylvestre X est appel e solution du syst me S p1 q1 P2 q2 U S51 S82 Fy a5 PrologIA Prolog INT RITA CIS LATE El ments de base R1 15 si X contient les m mes variables que S et si X est telle que les arbres p X sont respectivement gaux aux arbres qgj X et que les arbres sj X sont respectivement diff rents des arbres f X En utilisant ces notions il est possible de repr senter le premier arbre de ce paragraphe par a b c nil ou a b c suivant la syntaxe Le second arbre par plus fois 12 11 fois 12 l1 ou plus x x X avec X solution de x fois 12 11 et le troisi me par x X avec X solution de x ou c et a et x b 1 6 Les op rateurs Les op rateurs ont t introduits dans le compilateur Prolog II comme un moyen souple et clair d exprimer certains arbres Par exemple la repr sentation interne du terme mul sub 5 3 add 5 3 tant la m me que celle du terme 5 3 5 3 la deuxi me expression est certainement plus agr able lire que la premi re La syntaxe des expressions crites avec des op rateurs est donn e par expr expr expr
5. newline YA 2 format _escape p mp ny yr Nel ae newline octal_digit octal_ digit octal_digit x X hex_digit hex_digit ProloglA R1 6 Manuel de R f rence Identificateurs Les identificateurs ont deux repr sentations externes une repr sentation compl te et une repr sentation abr g e La premi re comporte un pr fixe qui sp cifie la famille dont l identificateur fait partie dans la repr sentation abr g e le pr fixe n appara t pas et il est suppos que certaines conventions de lecture criture pr cisent de mani re non ambigu quel est le pr fixe de l identificateur Ces notions sont expliqu es en d tail au chapitre 3 C est la pr sence ou l absence du caract re qui distingue la repr sentation compl te de la repr sentation abr g e d un identificateur Ce caract re peut tre red fini et remplac par un caract re graphique tel que le d crit le chapitre 3 Les identificateurs complets suivants sont corrects et repr sentent tous des identificateurs diff rents data peter grammar singular x peter lexicon name sys write sys env files peter grammar plural Note La cha ne vide est un pr fixe l gal l identificateur peter est donc correct syntaxiquement L identificateur suivant n est pas complet peter La syntaxe de la repr sentation abr g e des identificateurs et celle des variables sont tr s voisines et ensemble
6. 2 binary_digit o 1 octal digit POMI ae ES digit ON es hex digit digit qa b No d e nm A B NC D E vp alpha letter digit _ nn ba 2 prefix_limit t won myn wee Un EL wen mnt separator D MERE 2 2 separatorP Mey wn lt special_char 04 mnt Way wid Wy mon mn special char ue graphic c graphic char PrologIA E J Prolog VW CE J Prolog INT RITA CIS LATE C9 C10 El ments de base R 1 27 graphic char wn Won gt graphic char Mn nen QM LEA mn mon wy ets won Won mr HAN wom NBSP E ipti x Won graphic_char host graphic char character letter digit separator graphic char special char string char character Myn mr Mont C10 1 string _chari PAU C10 2 string _charil format _escape C10 3 string chart il accent escape Les accent escape accent accent letter a gt wo A an N o O cc CC ae AE mon oom BB Jo 0 y y i d D pp pp oa oA y accent mnt mnt a mn accent letter 5 a Ne Wan No y WAY E 1 LA o y format escape pb np n Mr we mn newline octal digit octal_digit octal_digit x X hex digit hex digit
7. Xm Sm qui font intervenir les variables de la r gle en question Chacune de ces r gles particuli res ro r rn peut s interpr ter de deux fa ons 1 Comme une r gle de r criture ro se r crit dans la suite r1 rn et donc lorsque n 0 comme ro s efface PrologIA Prolog R1 18 Manuel de R f rence HERITAGE 2 Comme une implication logique portant sur le sous ensemble A d arbres rl r2 rn l ments de A entra ne 70 l ment de A Dans ce cas lorsque n 0 l implication se r sume ro l ment de A Suivant que l on prend l une ou l autre des interpr tations les assertions se d finissent par D finition 1 les assertions sont les arbres que l on peut effacer en une ou en plusieurs tapes au moyen des r gles de r criture D finition 2 les assertions forment le plus petit ensemble A d arbres qui satisfait les implications logiques On peut d montrer l existence du plus petit ensemble de la deuxi me d finition et l quivalence des deux d finitions 1 8 Les m canismes de base de Prolog Nous venons de montrer quelle est l information implicite contenue dans un programme Prolog mais nous n avons pas montr ce qu est l ex cution d un programme Prolog Cette ex cution vise r soudre le probl me suivant Etant donn un programme qui est une d finition r cursive d un ensemble A d assertions Etant donn une suite de termes T t f
8. redef_array i n Analogue def _array mais si le tableau de nom i existe d j red finit sa taille n conserve les affectations existantes pour les indices valides et initialise s il y a lieu les nouveaux l ments is_array i t V rifie que l identificateur d signe bien un tableau et unifie avec sa taille kill_array i D truit le tableau de nom i Si le tableau n est pas d fini le pr dicat s efface en imprimant ventuellement un warning 4 4 Op rations sur les chaines char_code c n Fait correspondre au caract re c son code interne n et vice versa Ce code peut tre un code ISO ou le code de la machine h te Si c est un identificateur dont la repr sentation hormis les quotes est limit e a un caractere le code correspondant est unifi avec n Exemple gt char_code A n char_code A n n 65 gt char_code c 65 c A Cela d pend du niveau de warning choisi par une option au lancement de Prolog 211 s agit du code ISO 8859 1 voir la table compl te en annexe F Ce jeu est le jeu ASCII am ricain tendu sur 8 bits avec des caract res accentu s ProloglA Proley R4 10 Manuel de R f rence HERITAGE conc_string S S2 83 Enum re tous les triplets s1 52 53 de cha nes telles que s3 est la concat nation de s1 et s2 51 82 s3 doivent tre suffisamment connus pour produire des ensembles finis de triplets c est dire soit le troisi me argument conn
9. 1 lt lt num ro du bit 2 Ecrire une fonction par exemple myHandler qui servira activer le programme Prolog g rant l interruption 3 Associer dans l environnement Prolog l v nement myEvent avec la fonction le traitant en appelant la fonction pro_signal myEvent myHandler ProloglA R9 2 Manuel de R f rence 7 Prolog 4 Dans la routine appel e lors de l interruption transmettre l v nement a Prolog en appelant la fonction send_prolog_interrupt myEvent Un exemple de s quence d v nements et de traitements peut tre repr sent par le sch ma suivant pro_signal myEvent myHandler myHandler A new_goal i next_solution T kill goal z R I N T E R R U P T I O N interruption asynchrone utilisateur myAsynchronousHandler send_prolog_interrupt myEvent 92 Description des interfaces Prolog machine new_goal next solution kill goal myHandler reset myEvent flag prolog event handler myEvent Prolog machine set myEvent flag Les fonctions d finies ici permettent de lier Prolog H des proc dures d interruption Les prototypes de ces fonctions sont donn s la fin de ce chapitre pro_signal event_mask event_handler Permet d associer l v nement event mask la fonction d activation event_handler Cette fonction renvoie 1L en cas d erreur notamment s il existe d j
10. 1 le caract re est crit comme une s quence accent_escape cf R1 29 a R1 31 g garbage collection information Si la valeur est 1 option par d faut un message est imprim chaque fois qu il y a r cup ration m moire sinon aucune information n est imprim e G garbage collection La valeur d termine si l on doit interdire ou permettre la r cup ration de m moire dans l espace concern 1 Toutes les r cup rations sont interdites 0 Toutes les r cup rations sont permises c resp C La r cup ration dans le code est interdite resp permise d resp D La r cup ration dans le dictionnaire est interdite resp permise ProloglA Prolog HERITAGE Utilisation de Prolog II Windows U2 7 s resp S La r cup ration dans les piles est interdite resp permise i interpr te la lecture du caract re sp cial Si la valeur est 1 option par d faut le ou les caract res suivant le sont sp cialement interpr t s par exemple la s quence f signifie le caract re de tabulation Si la valeur est 0 le caract re perd sa valeur de caract re sp cial il n est plus possible de le composer avec un format _escape ou un accent escape pour repr senter un autre caract re quelle que soit la valeur de l option e o optimisation Optimisation du code g n r pour les instructions arithm tiques les instructions de comparaison les tests de type block val assign Lorsque cette option es
11. Deux tableaux pour les constantes un tableau de caract res pour les cha nes un tableau de doubles pour les r els Deux tableaux pour coder respectivement le type et la valeur d un terme et de ses sous termes un tableau de caract res pour les types ou tags de terme sous termes un tableau d entiers longs pour les valeurs de terme sous termes La signification de chaque l ment est donn e par le contenu de l l ment de m me indice dans le tableau de types Le terme correspondant l argument no_arg est d crit par la premi re case des tableaux de types et de valeurs de terme sous termes tag_tab 0 val _tab 0 7 3 2 1 Description du codage d un terme Un terme est repr sent par un tag et une valeur enti re dont l interpr tation d pend du tag ProloglA R7 12 Manuel de r f rence s quence tag valeur T la valeur de l entier Si l entier venant de Prolog est trop grand pour tre cod une erreur est notifi e R un index dans le tableau des r els doubles real tab x un index dans le tableau des r els doubles real tab S un index i dans le tableau des caract res str_tab indique le premier caract re de la cha ne La cha ne est termin e par un caract re NULL un entier repr sentant l identificateur de mani re unique Cette repr sentation est unique tant que l identificateur est d clar utilis cf set permanent symbol Sinon il peut tre supprim
12. en sortie Exemples atom concat hello world S3 S3 hello world atom concat T world small world T small atom_concat T1 T2 hello T1l T2 hello Ti h T2 ello Ti he T2 l1lo Ti hel T2 lo Ti hell T2 0 Ti hello T2 atom _length A N Unifie N avec la longueur de l identificateur Le pr fixe de l identificateur A est ignor Exemples atom length enchanted evening N N 17 atom_length N N 0 functor T F N Associe un arbre T son foncteur F et son arit N et vice versa functor foo a b c X Y X f 00 Y 3 functor X foo 3 X foo _515 516 517 functor X foo 0 X foo functor foo a foo 2 functor foo a fo 1 functor 1 X Y X 1 Y 0 functor X 1 1 0 X 1 1 functor _ 2 functor 0 name X L Si X est un identificateur ou un nombre L est unifi avec la liste des codes internes codes ISO ou codes de la machine h te des caract res constituant la repr sentation de l identificateur X Si L est une liste de codes internes des lettres d un identificateur X est instanci avec l identificateur d termin par les conventions courantes de pr fixage name abc def L ProloglA R 10 10 Manuel de R f rence L 97 98 99 58 100 101 102 name 123 L L 49 50 51 name X 65 66 4 name asd X name Y X name ab cd L L 97
13. gt reponse a tout dans quelle ville habite mimosa gt aspres sur buech olive porte t elle des lunettes gt non quelles sont les villes ayant au moins un habitant age de moins de 20 ans et portant des lunettes gt severac le chateau gt aspres sur buech Voici le programme complet 1 banque de donnees individu candide 20 constantinople non gt individu cunegonde 20 constantinople oui gt individu gontran 94 aspres sur buech non gt individu casimir 2 severac le chateau oui gt individu clementine 1 cucugnan non gt individu popeye 99 aspres sur buech oui gt individu olive 99 aspres sur buech non gt individu mimosa l aspres sur buech oui gt individu bip 15 pampelune non gt individu ignace 114 loyola oui gt individu balthazar 87 jerusalem non gt individu gaspard 96 smyrne oui gt individu melchior 34 kartoum non gt 2 definition des types type x nom gt nom x type x age gt age x type x ville gt ville x type x booleen gt booleen x nom candide gt nom cunegonde gt nom gontran gt nom casimir gt nom clementine gt nom popeye gt nom olive gt nom mimosa gt nom bip gt nom ignace gt nom balthazar gt nom gaspard gt ProloglA esha C 12 Annexe C ERITA nom melchior gt age 20 gt age 94 gt age 2 gt age 1
14. int max used int err integer 4 function fgetterm no_arg tabsize strtabsize realtabsize tagtab valtab strtab realtab maxused err integer 4 function fputterm no_arg tabsize strtabsize realtabsize tagtab valtab strtab realtab maxused err Des exemples d utilisation de ces proc dures d interface sera trouv dans le fichier expredef c ou fprouser eg du kit ProloglA J Prolog LIE PIT AZT AEN AGE Extensions avec des langages externes R 7 17 7 4 Principe de la m thode des descripteurs La m thode des descripteurs permet de d finir des objets relais Prolog et leur lien avec un objet externe Elle s applique pour les fonctions externes et les donn es partag es Dans cette m thode la d claration des objets et des liens se fait en C Nous verrons d abord quels sont les l ments d crire en C pour r aliser cette d finition et ensuite les deux mani res de les d clarer statiquement ou dynamiquement 7 4 1 El ments descriptifs Pour pouvoir r aliser cette association il est n cessaire de conna tre l objet externe dans un langage tel que C cela se traduit par son adresse et son type l objet Prolog c est dire son nom son type et sa taille ou son arit selon qu il s agisse d un tableau ou respectivement d un pr dicat Nous identifions donc les l ments n cessaires suivants name identifie le terme Prolog associ l objet externe C est un pointeur v
15. lt MODAL b gt ou lt modal b gt b est un bool en indiquant si la fen tre est bloquante ou pas La valeur par d faut est b 0 Cet attribut est valable pour tout type de fen tre Cette fen tre si elle est bloquante reste au dessus de toutes les autres fen tres et tous les v nements ext rieurs a 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 tu e Les fen tres modales peuvent tre empil es lt NO_RESIZE b gt ou lt no_ resize b gt b est un bool en indiquant si le redimensionnement de la fen tre au moyen de la souris ou d une combinaison de touches pr d finie pour certaines machines est interdit ou pas Par d faut b vaut 0 Quelle que soit la valeur de b une fen tre peut toujours tre redimensionn e par programme lt SHAPE n gt ou lt shape n gt n est un entier d terminant la forme de la fen tre Les formes standard sont 0 fen tre avec titre barre de menus et barres de d filement 1 fen tre cadre Par d faut les fen tres graphiques modales ont l attribut 1 et les autres types de fen tres ont l attribut 0 Cet attribut est valable pour tout type de fen tre On notera que les fen tres GRAPHICS et FRAMEPANEL n ont pas de barres de d filement ProloglA J Prolog LIE RITA EE LEP YAO Prolog INT RITA LI LITE Primitives graphiques U5 9 lt SAVE r gt ou l
16. Dans le cas 2 2 est l entier correspondant Dans le cas 3 2 tl gt in_word x y toto x toto y nil gt in_word x y insert x insert y insert gt in_word x y 012345 x 012345 y 12345 gt in _word x y x 3 y in_sentence tl t2 Lit une phrase qui se termine par ou tout autre caract re qui a t d fini comme terminateur et met la phrase sous la forme de deux listes t est la liste des unit s lexicales constituant la phrase les mots au sens de in_word et 2 est la liste des atomes correspondants comme pour in word La liste des terminateurs de phrases peut tre modifi e par les pr dicats add_ sentence _terminator I et remove sentence terminator 1 in sentence x y ceci est un string x ceci est un string nil ProloglA 7 Prolog ERITAIEGE TT Les entr es sorties R5 7 y nil nil nil string nil gt in_sentence x y somme 052345 x somme m u 1052345 7 n j 3 W SALE y nil 52345 nil add_sentence_terminator C Ajoute le caract re C dans la liste des terminateurs de phrases initialement dot e des caract res et remove_sentence_terminator C Enl ve le caract re C de la liste des terminateurs de phrases Provoque un chec si ce caract re n est pas dans cette liste read_unit t u Lecture d une unit lexicale Lit une unit lexicale et
17. Le manuel d Utilisation pr cise comment se r alisent de mani re pratique sur votre ordinateur certaines fonctions d crites dans le manuel de R f rence Cela concerne la structure des noms de fichiers la gestion des tats sauv s l utilisation de la m moire et comment lancer Prolog La seconde partie de ce manuel d crit ce qui est sp cifique cette version ce qu il y a en plus et en moins par rapport la version de base ainsi que les valeurs extr mes des constantes Nous vous conseillons galement de consulter les documents suivants Prolog F Giannnesini H Kanoui R Pasero M Van Caneghem InterEditions Mars 1985 ProloglA Dolas sata 4 xiv Manuel de R f rence HERITAG Prolog bases th oriques et d veloppements actuels A Colmerauer H Kanoui M Van Caneghem TSI vol 2 num ro 4 1983 Pour la programmation en syntaxe Edinburgh Prolog Programming for Artificial Intelligence Ivan Bratko Addison Wesley International Computer Science Series 1986 ProloglA Z J Prolog LE RYT AEE CIS LATE G n ralit s xv Garantie et responsabilites PrologIA 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 a 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 imperfect
18. R 10 22 Manuel de R f rence Exemple 2 user somme Z gt chiffre Z somme Z gt chiffre X somme Y Z is X Y chiffre N gt C string integer C N liste3 gt elt elt elt elt gt a elt gt b elt gt c phrase somme Z 1 2 3 Z 6 phrase liste3 L L a a al L a a b L a a c Re renre ProloglA Prolog HERITAGE Extensions Edinburgh R 10 23 ProloglA HERITAGE J Prolog LE RYT AVES CI LAGE Annexe A Differences Prolog H Norme A l Niveau g n ral A 2 Fonctionalit s non implant es A 3 Fonctionalit s restreintes A l Niveau g n ral Port e de la coupure dans un m ta appel En Prolog II la coupure dans un m ta appel a une port e sup rieure celle d finie dans la normalisation Ce qui signifie que l on a par exemple les diff rences de fonctionnement suivantes par rapport la norme insert a 1 a 2 call Z a X Z Z X 1 1 seule solution au lieu de 2 Les chaines de caract res En Prolog II une option suppl mentaire par rapport a celles d finies par la norme permet de classer un texte entre doubles quotes dans un type part enti re qui est le type chaines de caract res Cette option est celle en vigueur par d faut au lancement de Prolog Pr fixage des identificateurs En Prolog II les identificateurs lus se voi
19. U1 3 1 2 3 Fichiers pour les extensions standards 32 bits U1 4 1 2 4 Extensions en codel6 bits r serv Windows 3 U1 5 1 2 4 1 Principe des extensions 16 bits U1 5 1 2 4 2 Fichiers pour les extensions 16 bits U1 6 1 2 4 3 Exemples fournis ssh U1 6 1 2 5 Fichiers d exemples denim nt era U1 7 1 2 6 Conventions pour les suffixes des fichiers U1 7 1 3 Proceduresd installations nn a ere eee U1 8 1 4 Modification de l environnement d ex cution U1 8 2 Utilisation de Prolog II Windows ssssssssesssesssrse U2 1 2 1 Lancement et arr t de Proton hits U2 1 2 1 1 Activation fichiers par d faut U2 2 LE lt Arr t de Prol gn ien ea ai U2 2 2 2 Espaces et tailles par d PAU nan san U2 2 2 3 Syntaxe de la ligne de commande U2 3 2 4 Cr ation et ex cution d un programme U2 10 2 5 Interruption d un programme cccceecceesceesseceteceeeeeeeeensees U2 11 2 6 Construction et lancement de Prolog avec graphisme U2 11 ProloglA iv Manuel d Utilisation Windows 2 7 Compilation et dition de liens eee ecceeseceeeceeeeeeteeeeseeees U2 12 3 Sp cificit s de Prolog II WindoWs esse U3 1 3 1 Valeurs extr mes des constantes arithm tiques U3 1 3 2 Les caract res dans la syntaxe Prolog IH U3 1 3 3 Personnalisation d une Application U3 2 3 4 Modification du module princi
20. gt string ident y z outl z gt debug toto x 12 CALL toto v156 12 DBG block CALL titi 12 DBG CALL string ident 12 v360 DBG ARGUMENT DE MAUVAIS TYPE ARSARSAAASRAM RAAT SD ONE AAS SARA REBAR ALA AA AAA AKA titi 1 rule number 1 toto 2 rule number 1 CALL outl 253 DBG AAA AAAAKA L information sur l erreur est ARGUMENT DE MAUVAIS TYPE RAP ASIN RRR DEREN PSST CY Tp SSS AIS ISIS FARMER AAA AAAAKA titi 1 rule number 1 toto 2 rule number 1 AKA KAA AAA AAAAAKA AKA KAA AAA AAAAAAKA BOTTOM AA AAA AAA Il est possible de supprimer par commande pour une session de mise au point l affichage de ces informations sur les erreurs Voir la commande du debuggers Les erreurs produites en Prolog par block_exit ne sont pas mises en vidence par ce m canisme La r gle pr d finie block exit est trait e comme un pr dicat ordinaire Pour tre averti de ce type d erreur il suffit de mettre un point d arr t sur block _exit I et block exit 2 Sur un point d arr t c est dire quand un but est appel L impression des buts peut se faire deux moments nous les appellerons avant unification et apr s unification Voir les commandes du debugger p P Les buts peuvent tre imprim s avant l unification c est dire l impression montre le but tel qu il apparait dans la r solvante avant son unification avec la t te de la r gle choisie pour son effacement Ils peu
21. l initiative du Client mais certaines prennent aussi la forme de notifications asynchrones de la part du Serveur Le Client est suppos en tenir compte pour adapter sa conduite De m me le Client est suppos conna tre le mode d emploi du Serveur qu il pr tend utiliser Eventuellement il y aura galement lieu pour le Client de d marrer l applicatif Serveur d sir Primitives de connexion et de d connexion ddeDeclareAsClient _xService _tTopic _hConversation Tente d ouvrir une conversation sur le Topic sp cifi par la cha ne de caract res _tTopic avec le Serveur logique sp cifi par la cha ne de caract res _xService ou n importe quel serveur si_xService vaut nil Si la conversation est ouverte l argument Conversation est unifi avec une valeur entier opaque unique identifiant cette conversation pour toute op ration future Si aucun serveur n est trouv une erreur est signal e Si plusieurs serveurs sont candidats seule la premi re r ponse sera retenue ddeEndConversation _hConversation Termine la conversation d sign e par hConversation en cong diant le Serveur Si Conversation est une variable libre termine par num ration backtracking toutes les conversations en cours en unifiant Conversation avec la conversation concern e Si la conversation d sign e n existe pas l unification choue L usage de cette primitive est naturel pour le Client Primitive de transmission de requ tes ddeTransmit
22. 30 gr popupltem U 5 38 gr printU 5 11 gr rect U 5 29 gr sensitive U 5 34 gr _setorigin U 5 29 gr _stringwidth U 5 27 J Prolog ERIMTAGE gr text U5 28 gr tree click U 5 41 gr window U 5 10 gr window is U 5 10 gtty U 5 37 halt R 10 20 heap R 6 26 hidden R 3 25 hidden_debug R 3 25 hidden_rule R 3 25 hscroll U 5 15 16 ident R 4 1 ifR4 5 ignore ops R 10 19 inR2 11 inR5 4 include R 3 25 index R 3 21 32 indexation R 3 21 infR 4 4 infe R 4 5 infinite R 2 11 infinite flag R 6 12 initial po R 3 4 initial po U 1 3 8 initial po U 2 2 4 initialization R 3 27 InitializeProlog U 3 4 init_fassert R 3 26 init_screen U5 6 ini module R 3 15 17 ini module R 6 1 inlR 5 4 input R 5 8 input R 6 5 input R 10 13 input U 5 39 ProloglA J Prolog LIE PIT AZT AEN AGE input is R 5 8 insert R 3 27 28 insert R 6 5 insert U2 7 insertz R 3 27 28 integer R 4 1 integer rounding function R 10 19 Interruption R 2 6 interruption R 9 1 INT ARRAY R 7 18 21 int edit mo U 1 4 int _edit mo U 5 6 in char R 5 3 in char R 5 4 in double R 5 5 in ident R 5 6 in integerR 5 5 in realR5 5 in sentence R 5 6 in string R 5 5 in wordR5 6 is R 10 2 7 is array R 4 9 is_uncompiled R 3 28 items U 5 19 items nb U 5 17 keysort R 4 16 kill array R 4 9 kill array R 7 18 kill_ array U 2 8 kill goal R 8 3
23. 7 3 2 3 Description des fonctions de communication ProloglA R7 16 Manuel de r f rence HER 7 Prolog TAGE Les param tres de ces fonctions sont Le num ro de l argument no_arg Lataille des tableaux fab size str_tab_size real tab size Les tableaux utilis s pour coder le terme fag tab val tab str_tab real tab Lorsqu un tableau n est pas r f renc par exemple s il n y a ni cha nes ni r els il peut tre remplac par NULL Une erreur est signifi e lorsqu un des tableaux n a pas une taille suffisante pour coder le terme Un entier indiquant la derni re case utilis e pour coder le terme dans les tableaux tag_tab et val tab max used Dans l exemple d crit plus haut il vaut 13 L indicateur err indiquant si une erreur ou un backtracking doit tre provoqu Cet indicateur doit tre test chaque appel et il faut sortir de la proc dure externe imm diatement s il est non nul int get term no arg tab size str tab size real tab size tag tab val tab str tab real tab max used err int no_arg int tab size str tab size real tab size char tag tabl long val tabll char str tabl double real array int max used int err int put termi no arg tab size str tab size real tab size tag tab val tab str tab real tab max used err int no_arg int tab size str tab size real tab size char tag tabll long val tabl char str tabl double real array
24. A A repas 3 rule number 1 esas eth Hoe ee eT BOUT OM sy ES RS EE RER DBG CALL plat v191 DBG s ici aussi puisque plat ethors d oeuvre sont de m me profondeur NAANA ARAA AAAA NEO DIN SAAR ARAL A AMEN EAUX A A repas 3 rule number 1 AARAARARARAAARAARAARAA AARAAARARAARAARAAA BOTTOM DBG CALL viande v191 DBG s ici plat n apparait pas puisque viande est son appel terminal SPIE AISA RARE AT SD ARS ES OES ASX PINS A A repas 3 rule number 1 AA KAKA AAA AAAAAKA AA KAA AAA AAAAAAAA BOTTOM DBG CALL dessert v226 DBG s ici repas n apparait plus puisque dessert est son appel terminal PAILS OASIS DSS ISCAS ATCT NARS PISA ARR REX AA AKA KA AAA AAA AAKA AAA KAA AAA AAAAAAAA BOTTOM DBG Enfin pour avoir acc s au plus grand nombre d informations il est possible d ouvrir une session Prolog Ainsi il est possible de v rifier les effets de bords du programme de relancer une partie du programme de lancer un programme annexe de v rifier la base de r gles de consulter l occupation des piles A l ouverture de la session le prompt de la ligne de commande est affich dans la console et l utilisateur peut entrer n importe quel but Prolog A la fermeture de la session par l effacement de quit par exemple la mise au point continue o elle en tait Il faut noter que les effets de bord de la session sont gard s affectations ajout suppression de r gles ouverture fermetur
25. Jacques Marie plus pour 2 et 2 font 4 PA suc suc suc suc suc suc 0 0 suc suc 0 suite infinie pour 1 1 1 est une suite infinie e al e ox 1 e ni 1 a take Figure 1 9 Une syntaxe simplifi e des r gles est la suivante 4 On trouvera au dernier paragraphe de ce chapitre la syntaxe compl te des r gles PrologIA 2 J Prolog LIE RITA AE AEN LAGE El ments de base R1 17 term mon nn term term term URL mn ei term gt term Avec la contrainte fondamentale suivante Le terme qui est le membre gauche d une r gle doit tre soit un identificateur soit un tuple dont le premier argument est un identificateur Par exemple les termes go pere de _x y ou lt pere de x y gt peuvent tre des t tes de r gle correctes tandis que contrairement ce qui se passe pour Prolog I des termes comme lt lt pere de x gt y gt ou lt masc sing x y gt ne peuvent pas l tre Pour le moment nous ferons abstraction de la notion de parasite qui comme nous le verrons plus tard est un moyen ad hoc d appeler des sous programmes non crits en Prolog Les r gles de la forme t0 gt t tn induisent un ensemble g n ralement infini de r gles particuli res portant sur des arbres t0o X t X tn X obtenues en consid rant pour chaque r gle toutes les affectations sylvestres possibles X X1 51
26. Lors de l utilisation des primitives de communication avec Prolog il est utile de savoir que les pointeurs pass s sont convertis mais que les donn es point es ne sont pas copi es L op ration est donc relativement performante ProloglA U1 6 Manuel d Utilisation Windows 1 2 4 2 Fichiers pour les extensions 16 bits usermpty c Fichier d extension vierge compl ter par vos fonctions qui peuvent galement figurer dans un source s par ou des librairies statiques Ce fichier fournit aussi les fonctions standards d initialisation et de terminaison de la DLL permettant d y placer ventuellement les votres callpro h Fichier fournissant les prototypes des primitives de communication inclure callpros lib callprol lib Librairie statique fournissant le code de liaison Prolog disponible en mod le Small callpros et Large callprol L une des deux versions doit tre li e votre code callpro def Fichier de d finition de module standard pour la DLL utilis par l diteur de liens Vous devrez ventuellement en modifier les param tres et y rajouter vos propres exports Les ordinaux sont sans importance les fonctions de connexion tant reconnues par leur nom userdll mak Exemple de makefile pour la DLL a adapter 1 2 4 3 Exemples fournis Les DLLs d extensions r alis es en exemple doivent donc tre copi es aupr s de l ex cutable et renomm es pour tre reconnues Une seule est don
27. Prolog U4 4 Manuel d Utilisation Windows HERITA G E Les buts callbacks intervenant dans des m canismes syst mes avec les probl mes classiques que cela suppose ne peuvent pas tre mis au point sur site mais devront l tre avant raccordement dans un contexte de simulation De m me ils doivent fournir des traitements de dur e raisonnable cette notion restant intuitive La notification de la transmission d une donn e se fait sur la base du Topic La distribution chaque client concern par ce Topic est assur e de mani re interne 4 2 Utilisation simple de Prolog II comme serveur DDE Pour utiliser Prolog II comme un Serveur DDE il est n cessaire de disposer d un applicatif Client capable de formuler des requ tes param trables au format Texte Pur A titre de test il existe plusieurs possibilit s disposer d j d un tel applicatif m me surdimensionn pour cet usage utiliser un Sample DDE Client fourni avec le Software Development Kit pour la plate forme h te exemple le SDK 32 bits de MicroSoft pour Windows utiliser une autre instance de Prolog II programm e en Client DDE 4 2 1 Initialisation du serveur Prolog II Afin de valider le Service DDE la primitive suivante doit tre invoqu e ddePublishExternalEvent _bActivate Active _bActivate vaut 1 ou d sactive _bActivate vaut 0 le Service La d sactivation du Service interdit toute future connexion mais ne cong die pas
28. Telle Donn RequestData HotLinkData gt WarmLinkData PokeData Donn e eae e Data pour Req ON STATU 4 1 2 Les possibilit s du protocole DDE Prolog Afin de respecter le mod le de programmation standard de Prolog II le protocole DDE g n ral a t adapt suivant les possibilit s suivantes Tous les changes se traduisent par des appels de primitives ou bien l appel automatique de buts par le syst me Ces buts seront dans toute la suite appel s buts callbacks Le retour d une primitive correspond la fin d une transaction et fournit le statut associ Les param tres des communications lui sont pr sent s sous une forme classique en Prolog II les cha nes de texte elles m mes pour les cha nes d identification Service Topic Item et un entier opaque pour les identificateurs de conversation Une base de donn es interne assure la conversion et le contr le de coh rence des param tres fournis par l utilisateur Les capacit s du DDE Prolog sont limit es des donn es de type Cha ne de Texte Standard Le cas o ni le Service ni le TOPIC n est sp cifi par le Client potentiel suppose une phase de n gociation o le Serveur d crit ce qu il propose Ce sous protocole n est pas impl mentable sous forme de squelette extensible en Prolog Donc il a t d cid que seules les Wild Connections avec Topic sp cifi seraient accept es par Prolog ProloglA
29. VT100 etc et associer ces deux noms en ajoutant une assertion termi nom_externe nom_interne gt Notez que l utilisateur final n est cens connaitre que le nom externe 2 Ajouter deux nouvelles d finitions des r gles en graphique et hors_graphique qui commandent le passage du terminal du mode caract res au mode semi graphique et r ciproquement ProloglA J Prolog LIE PIT AZT AEN AGE Les entr es sorties R5 15 3 Ajouter une nouvelle r gle config d finissant les cha nes de caract res qui en mode graphique provoquent l affichage des graphismes indiqu s Remarque Dans tous les cas le mode TTY permet d obtenir des dessins approximatifs sans utiliser aucune possibilit graphique du terminal Ceci peut s av rer utile par exemple pour imprimer des dessins d arbres sur une imprimante classique 5 4 D claration d op rateurs Les op rateurs permettent une notation sans parenth ses des termes fonctionnels un ou deux arguments Le symbole fonctionnel est remplac par un op rateur plac en position infix pour les termes fonctionnels deux arguments pr fix ou postfix pour les termes fonctionnels un argument Un op rateur est d fini par un symbole une pr c dence et des r gles de parenth sage Pour lever l ambigu t des expressions contenant plusieurs op rateurs on parenth se d abord les op rateurs de plus faible pr c dence Lorsque des op rateurs ont m me pr
30. X 1 000000000000000e 110 string double s d Identique string real s d ProloglA Prolog R4 14 Manuel de R f rence HERITAGE string term s t s n string term s t s string_term s t Essaie de lire dans la chaine de caract res s un terme Prolog qui sera unifi avec f s est la partie de la cha ne s qui n a pas pu tre utilis e Si une variable appara t dans s une variable libre Prolog est cr e Inversement si s n est pas connue crit la fa on de out t le terme dans une cha ne de taille maximale de n caract res 400 lt n lt 32768 et l unifie avec s s n est pas utilis e dans ce cas est un terme tout fait quelconque pouvant m me contenir des variables et des structures complexes Si l criture de f ne tient pas sur n caract res une erreur est g n r e Sin n est pas sp cifi 400 est choisi gt string term s myterm x 1 2e0 s string termi s x s s myterm v14 1 200000000000000e 00 x myterm v15 1 2000 00000000000e 00 gia gt string term 1 2 3 t s string term s t s ee ete a eat a term_vars t l Unifie avec la liste des variables libres ventuellement contraintes de t est un terme prolog quelconque voire infini Exemple gt term_vars one 2 x y y t t x y nil 4 6 Comparaison de termes quelconques Il est possible de comparer formellement deux termes Prolog quelconques Pour cela l ordre croissant suivant sur les termes a
31. d clar int test_ccom int err char s 80 get_strterm 1 80 s 1 amp err if err return err fprintf stderr gt gt gt gt s n s put_strterm 2 s 1 amp err if err return err return 0 gt test ccom term 1 2 x string 1 z gt gt gt gt term 1 2 v64 string nil z term 1 2 v150 string nil gt 7 3 2 Au moyen de structures de tableaux Les deux fonctions de communication de termes get term et put_term d crites ici sont les fonctions de communication de donn es les plus g n rales ProloglA J Prolog LIE PIT AZT AEN AGE Extensions avec des langages externes R7 11 Sachant que les fonctions de communication de termes simples sont typ es cette interface peut servir galement dans le cas o le type de l argument traiter n est pas connu a priori Dans le cas de la communication du langage externe vers Prolog il s agit d unifier le terme propos avec l argument du pr dicat Prolog associ Si l unification choue un backtracking est annonc par la fonction de communication Les structures de Prolog sont transform es par ces proc dures d interface en une structure de tableaux facilement manipulable dans des langages algorithmiques typ s comme Pascal ou C Les structures obtenues peuvent tre conserv es d une ex cution une autre et peuvent tre crites ou charg es partir d un fichier Pour cela les termes de Prolog sont clat s dans quatre tableaux
32. effacer 3 En ex cution Prolog dans une r gle pr d finie Pendant l effacement d une r gle externe le programme C ou Pascal etc en question obtient le contr le de l ex cution et la machine Prolog para t l arr t cependant cette situation diff re des tats pr c dents dans le fait qu il ne correspond pas un point d arr t la machine Prolog n est pas naturellement arr t e au d but ou a la fin d un effacement mais au contraire elle se trouve en plein milieu d un effacement en attente de la terminaison d une proc dure externe 4 Solution trouv e SOLUTION_EXISTS C est le point d arr t le plus fr quent la suite de buts courante vient d tre enti rement effac e Le programme appelant peut r cup rer les solutions travers l argument _x de l appel exec _ b x La machine Prolog a m moris tous les points de choix de l effacement en cours A partir de cet tat on peut appeler la proc dure next_solution pour relancer la machine afin d obtenir les autres solutions La s quence d tats la plus fr quente sera donc NO GOAL But pr t SOLUTION EXISTS gt SOLUTION _EXISTS NO GOAL 5 Erreur rencontr e ERROR C est l tat dans lequel la machine est mise lorsqu une erreur a fait avorter son fonctionnement normal Une activation par next_solution la fera passer alors dans l tat NO GOAL ProloglA 7 Prolog TOIVE LITE J Prolog LIE PIT AZT
33. end of stream reste at Ceci est utile pour des terminaux lg_ buffer L o L doit tre un entier et indiquera la taille du buffer associ l unit reposition B o B peut prendre la valeur frue ou false et indique si l index de lecture ou d criture peut tre repositionn appel la primitive set stream _position 2 D faut true type T o T d signera le type de l unit Le canal C associ l unit doit tre une variable libre lors de l appel et est unifi avec une valeur enti re n gative transparent pour l utilisateur Exemple open bfile write X lalias bfile type binary x 7 set_stream_position C N Positionne au Ni me octet le pointeur de lecture ou d criture de l unit associ e au canal C N doit tre un entier et l unit doit tre un fichier disque stream _property C P R ussit si l unit associ e au canal C a la propri t P C peut tre une variable libre auquel cas tous les canaux ayant la propri t P seront unifi s successivement avec C P peut soit tre libre soit indiquer une propri t prise parmi alias A o sera unifi avec l alias de l unit file _name S o S sera unifi avec le nom de l unit input qui sera vrai si l unit est une unit d entr e mode M o M sera unifi avec le mode d ouverture de l unit output qui sera vrai si l unit est une unit de sortie position P o P sera unifi avec la position du p
34. gt r p ter gt r p ter Le coupe choix permet au ramasse miettes de r cup rer davantage d espace en supprimant des points de choix Il faut cependant remarquer que si on le place en fin de r gle on fait dispara tre la propri t de r cursion terminale r p ter gt out 1 r p ter r p ter gt Le programme ci dessus provoquera un d bordement le est un litt ral effacer alors que le programme ci dessous tournera ind finiment r p ter gt out 1 r p ter r p ter gt ISi le syst me de r allocation automatique n est pas d sactiv au d marrage de Prolog un certain nombre de r allocations se produiront avant le d bordement ProloglA R2 14 Manuel de R f rence 2 5 Les meta structures 2 5 1 Cr ation Il est possible en Prologil d attacher une variable une liste de termes On parlera alors de m ta structure ou variable attribu e et de termes attribu s La particularit de ces variables est que l unification avec un terme connu ou bien avec une autre variable attribu e est remplac e par des appels des pr dicats utilisateurs En effet une tentative d unification d une variable attribu e avec un terme connu est remplac e par autant d appels que de termes dans la liste attach e cette variable De la m me mani re une tentative d unification de deux variables attribu es se traduira par des appels successifs tous les pr dicats contenu
35. jour de l Item L avantage de cette m thode est que la synchronisation est semi implicite elle convient tr s bien un Client structure v nementielle Il est noter que si le Client veut diff rencier la derni re solution des autres le but appel devra tre encapsul afin de transmettre une solution diff rentiable Apr s avoir eu satisfaction le Client devra annuler le lien Requ te Unadwvise Remarques Si le Serveur Prolog II est sollicit par plusieurs Clients les buts transmis sont empil s par ordre chronologique sans autre lien avec leur auteur que l identifiant sp cifi Cette caract ristique permet de partager des donn es entre Clients avec ou sans leur consentement Dans le cadre d une application reposant sur plusieurs applicatifs il convient de bien choisir les identifiants utilis s ProloglA 2 J Prolog TA NAT LITE f J Bola Communication avec une application en utilisant le protocole DDE U4 7 Dans le cas o l un des Clients transmet le but quit ou tout autre ayant un effet de bord quelconque Prolog I l ex cute sans consid ration pour les int r ts des autres Clients Exemple un outil tentant p riodiquement une connexion sur Prolog II pour y lancer une requ te Execute quit constituerait un vrai vaccin anti Prolog 4 2 4 Sch ma du Serveur Prolog II Ce sch ma est rapprocher de celui plus g n ral donn pr c demment Serveur Logique Client Logic ue Le
36. les caract res accentu s dans le code ISO 8859 1 PrologIA Bulag El ments de base R1 29 La table suivante donne la correspondance entre les caract res accentu s et leur expression sous la forme de accent_escape On y apprend par exemple que les deux cha nes de caract res tel maitre tel l ve et tel ma itre tel el eve sont quivalentes sj I I a BU ai yy Table 2 accent escape utilis s par Prolog II 1 10 Le macroprocesseur Il est possible d crire en Prolog II quelques macros ou alias tr s simples afin d augmenter la lisibilit des programmes Cette fonctionnalit est r alis e au moyen d une directive de compilation et non un pr dicat set_alias i t D finition d un alias A partir du lieu et moment o cette directive est rencontr e le lecteur remplace certaines d tails ci dessous occurrences de l identificateur i appel alias par le terme appel valeur Cette d finition est d sactiv e en fin de compilation de plus haut niveau d imbrication La valeur f doit tre de type entier r el ou cha ne de caract res L alias 7 doit tre de type identificateur ProloglA R 1 30 Manuel de R f rence Seuls les identificateurs en position d argument pas les t tes de r gle et non pr fix s explicitement dans le texte sont remplac s par la valeur de l alias Il est ainsi possible de conserver en le pr fixant explicitement dans le texte
37. ou bit bit entre et 2 lt lt t1 t2 valeur lt lt f1 12 tl d cal de 2 bits vers la gauche gt gt t1 12 valeur gt gt t 12 tl d cal de 2 bits vers la droite ES t valeur f compl ment bit bit de Les fonctions suivantes doivent tre appliqu es des entiers ou des r els et 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 valeur cos t valeur cos t cosinus valeur exp t valeur exp f exponentielle valeur In t valeur n t logarithme n p rien valeur rad t valeur rad t conversion en radian valeur sin t valeur sin t sinus valeur sqrt y valeur sqrt t racine carr e valeur tan t valeur tan t tangente valeur f t n valeur t7 t2 valeur t1 la puissance valeur 42 PrologIA J Prolog LIE RR fT Ay LI LITE Op rations pr d finies sur les donn es R4 7 4 3 Affectation assign i t tassign i t cassign i t Affectent le terme l identificateur i t peut tre un terme Prolog quelconque 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 classi
38. ts gt t1 n est pas un identificateur appara t dans un terme de profondeur n alors l atome lt gt est de profondeur n et les arguments du n uplet t1 t2 ts sont de profondeur n 1 Si une liste x y apparait dans un terme de profondeur n alors x est de profondeur n et y est de profondeur n 1 Par exemple voici comment sont d finies les profondeurs des atomes pour le terme suivant element de 12 1 2 3 4 5 nil non 1 2 2 3 4 5 6 7 2 En limite de profondeur 3 il sera imprim element de 12 1 2 non Voir la commande du debugger m Choix de l information Certaines parties du programme ont d j t prouv es il n est pas n cessaire de les v rifier En mode interactif par la progression next on peut viter de d velopper le corps d un pr dicat En mode trace trace totale ou impression des informations entre deux points d arr t la m me possibilit est offerte Par exemple si plat 1 ne doit pas tre d velopp on obtient gt trace repas e p d hors d oeuvre Artichauts Melanie plat Grillade de boeuf dessert Sorbet aux poires e Artichauts Melanie p Grillade de boeuf d Sorbet aux poires au lieu de gt repas e p d hors d oeuvre Artichauts Melanie plat v191 viande Grillade de boeuf dessert Sorbet aux poires e Artichauts Melanie p Grillade de boeuf d Sorbet aux poires Voir les commandes du debugger gt lt j 6 6 2 5 Informations annexes
39. une fonction associ e event mask NULL sinon Si le deuxi me argument est NULL la fonction d activation associ e au premier argument est supprim e et sa valeur est renvoy e comme r sultat de la fonction L argument event_mask doit tre une des valeurs parmi 1 2 4 8 16 32 64 128 ProloglA J Prolog LIE PIT AZT AEN AGE Interruptiions R9 3 Lorsque la fonction event _handler est appel e si son r sultat n est sup rieur 0 l erreur Prolog correspondante est d clench e send prolog_interrupt event_ mask D clenche le traitement associ l interruption event mask d s que la machine Prolog le permet Conventions pour l appel de la fonction d activation event_handler Cette fonction doit retourner un entier qui est interpr t comme un code erreur Prolog si cet entier est positif Lorsque plusieurs interruptions sont en attente elles sont trait es dans l ordre d fini par les num ros des bits bit 0 d abord Il est d conseill d utiliser les fonctions get_strterm et put_strterm si le temps est critique ces fonctions tant relativement longues d ex cution Prototypes des fonctions d interface long pro _ signal event_mask event_handler unsigned short event_mask int event_handler void send prolog interrupt event mask unsigned short event mask 9 3 Exemple complet Nous d crirons dans cette section titre d exemple un cas pr cis construit pour le syst me UNIX et
40. yf n Pre g n xfx n OPng d g n 1 d n 1 val 1 lt 2 x xfy n Pag d g n 1 d n a b cE yfx n OPngd g n d n 1 val 1 2 3 x Le tableau suivant d crit les op rateurs en syntaxe prolog II Le tableau indique pour chaque op rateur le terme syntaxique construit lop rateur _ pr c dence type terme construit gt 700 xfx sys supe tl t2 700 xfx sys eql t1 t2 y 500 yfx sys V t1 t2 es 400 yfx sys gt gt t1 t2 ii 200 xfx sys t1 t2 Note 1 Les arbres correspondant aux op rateurs unaires et sont valu s au moment de l analyse si leur argument est une constante enti re Note 2 Les op rateurs peuvent tre crits avec des quotes simples Celles ci n ont donc pas d autre fonction en Prolog I que d tendre la syntaxe des identificateurs Il n est donc pas possible d utiliser une notation fonctionnelle autre que celles des tuples pour un foncteur d clar en op rateur Lorsque l on a un doute sur le terme construit on peut toujours le tester en d composant le terme gt eq F X Y 1 lt 2 F inf X 1 Y 2 ProloglA R 1 24 1 59 93 Manuel de R f rence Le niveau lexical Cette syntaxe d finit les m mes unit s que celles reconnues par la primitive read unit x y Notes 1 La r gle L4 d finit la syntaxe de base des variables deux extensions de cette syntaxe sont donn es par les r gles L5 syntaxe Prolog II et L5 E syntaxe Edinburgh Dans les deux c
41. 2 gt 1 X val 1024 gt gt 2 X val 14 687 X func 1 X func 1 2 fail ProloglA Pl B 12 Annexe B Ft ProloglA J Prolog LIE PIT AEE _ J LICE Annexe C Quelques exemples de programmes Prolog II C 1 Les grammaires C 2 D rivation formelle C 3 Les mutants C 4 Interrogation par valuation d une formule logique C 5 Un casse t te C 6 Construction d un chemin C 7 Les arbres infinis Cit Les grammaires Description du probleme La grammaire d un langage est un ensemble de r gles qui permet de d terminer si oui ou non une suite de mots construits sur un certain alphabet appartient au langage Si oui on peut alors mettre en vidence la structure sous jacente de la phrase analys e Les langage hors contexte forment une classe importante voici par exemple la grammaire d finissant l ensemble de toutes les expressions arithm tiques que l on peut construire sur les nombres entiers les op rateurs avec leurs priorit s habituelles 0 lt expression gt lt somme gt 1 lt somme gt lt produit gt lt reste de somme gt 2 lt produit gt lt primaire gt lt reste de produit gt lt primaire gt 3 lt nombre gt 4 lt expression gt lt reste de somme gt 5 lt op add gt lt produit gt lt reste de somme gt 6 lt vide gt lt reste de produit gt ProloglA C 2 C 1 51 Annexe C 7 lt op m
42. 8 sscanf R 7 27 stack R 6 26 stacks R 6 25 StartPrologMainGoal U 3 4 state R 6 24 state U 5 18 19 statistics R 6 24 store _C_backtrack_ data R 7 23 stream_property R 10 13 string R 4 1 STRING ARRAY R 7 18 21 string double R 4 13 string ident R 3 4 string ident R 4 13 string integer R 4 13 string real R 4 13 Index Prolog II Windows I 11 string term R 4 14 stty U 5 36 style menu U 5 25 sub R 4 4 substring R 4 10 sub_atom R 10 11 sup R4 5 supe R 4 5 suppress R 3 31 suppress R 7 18 suppress U 2 8 SYMBOL ARRAY R 7 17 18 21 symbol string R 7 15 sys_ command R 6 5 tab R 10 18 tab user param U 2 9 tan R4 6 tassign R 4 7 tell R 10 18 telling R 10 18 TerminateProlog U 3 4 term cmp R 2 8 9 term_cmp R 4 15 term_cmpv R 4 15 term_expansion R 10 21 term_vars R 4 14 text R 5 1 text U 5 18 19 text_selection U 5 18 throw R 10 4 time R 6 4 told R 10 18 toplist U 5 19 top_attach U 5 13 top left U 5 18 to_begin R 6 2 trace R 6 7 18 ProloglA I 12 Index Prolog II Windows trail R 6 26 true R 10 4 trunc R 4 5 truncate R 10 7 TTY U5 3 8 TTY U5 37 tty U 5 8 17 tty_areaR 5 2 tuple R 4 1 tval R 4 3 type R 10 13 type US 17 unify tv R2 15 unify with occurs check R 10 5 unix pipeR5 1 unknown R 10 19 update U 5 21 userdll mak U 1 6 usermpty c U 1 6 userrsc rc U 3 3 use
43. 9 prolog po R 6 1 prolog po U 2 2 11 prolog res U 1 5 prolog2 pre U 1 4 prolog2 pre U 2 4 PrologDir2 U 1 4 8 Index Prolog II Windows PrologDir2 U 2 2 9 PrologEdit U 1 4 8 PrologEdit U 5 6 prologlI R 6 24 prologHE R 6 24 ProStart R 8 3 5 ProStart U 3 4 protected U 5 18 prouser c R 4 10 prouser c U 1 5 prouser c U 2 12 prouser c U 3 3 prouser obj U 1 5 PRO BIND R7 19 pro_signal R 9 3 pro_symbol R 7 15 Pulldown menu U 5 5 pulldown menu U 5 17 Push button U 5 4 push button U 5 17 putR 10 18 put byte R 10 18 put char R 10 18 put code R 10 18 put double R 7 7 put_integer R 7 7 put real R 7 7 put string R7 7 put strterm R 7 9 put term R 7 16 quit R 6 1 quit U 2 2 quoted R 10 19 radR 4 6 Radio button U 5 4 radio_button U 5 17 rank U 5 18 ProloglA I 10 Index Prolog II Windows read R5 2 read R 10 16 read line R 10 16 read rule R 5 7 read term R 10 16 read unitR 5 7 real R4 1 realloc R 6 25 26 reconsult R 10 5 redef array R 4 9 reinsert R 3 27 28 reload R 3 33 reload U 2 8 rem R 1 23 rem R 4 4 rem R 10 2 remove _implicit R 3 12 remove sentence terminator R 5 7 repeat R 2 9 reposition R 10 13 14 reset R 10 13 reset_chrono R 6 4 reset_cpu time R 6 4 reset_permanent_symbol R 6 26 reset_permanent_symbol R 7 16 reset window U 5 11 restore C backtrack data R 7 23 res
44. AEN AGE Sp cificit s de Prolog II Windows U3 3 Dans n importe lequel des tats 1 4 ci dessus la proc dure new_goal peut tre appel e pour installer un nouveau probl me par dessus le probl me courant lequel est conserv exactement dans l tat o il se trouve afin de pouvoir ult rieurement continuer obtenir ses solutions De la m me mani re dans les tats 2 5 on peut appeler la proc dure kill_ goal qui provoque l abandon du probl me en cours et le retour au probl me pr c dent qui se retrouve exactement dans l tat o il tait quand on a appel new goal Les fonctions permettant d activer la machine Prolog i e de la faire transiter vers un autre tat sont ProStart Fonction permettant d initialiser la machine Prolog Cette fonction doit tre appel e une fois avant tout autre appel concernant Prolog Initialise la machine dans l tat 1 ProFinal Fonction permettant de terminer et lib rer la machine et l environnement Prolog Elle a un argument de type entier qui sp cifie le status de terminaison de Prolog new_goal M morise l tat courant de la machine et fait passer dans l tat 2 but pr t a tre ex cut L tat 2 est initialis avec l appel exec _b s dont les variables doivent tre instanci es par le programme appelant APRES l appel de new_goal Cette proc dure permet d empiler des activations de buts _b jusqu une profondeur limit e seulement par la
45. C est pour pouvoir simplifier la d finition d un contexte qu ont t introduites les notions de suite explicite et de suite implicite La notation de la suite d identificateurs du contexte est all g e en permettant de d signer implicitement un ensemble d identificateurs en sp cifiant leur pr fixe La suite d identificateurs complets d un contexte peut alors tre elle m me repr sent e par un couple suite explicite d identificateurs suite implicite d identificateurs o la suite implicite repr sente des familles d identificateurs du programme d sign es par leur pr fixe Un contexte est maintenant d crit abstraitement par une structure de la forme suite explicite suite implicite pr fixe par d faut Voici un exemple d une telle description pour la suite suivante m1 out m2 peter tous les identificateurs de la famille m4 tous les identificateurs de la famille sys ml out m2 peter m4 sys a b Il y a cependant un danger a confondre la notion de suite d identificateurs pour un contexte de lecture criture et celle de famille d identificateurs d un programme l ensemble des identificateurs ayant t utilis s dans un programme augmente avec le temps et donc les op rations de lecture criture peuvent devenir non r versibles Pour r soudre ce probleme on introduit la notion de famille d identificateurs ferm e pour le contexte C est un sous ensemble d une famille de noms don
46. Ce message signale que la lecture du fichier d entr e est termin e C est plut t un avertissement qu un message d erreur L entr e bascule alors automatiquement sur le clavier ERREUR D OUVERTURE DU FICHIER D ENTREE Ce message signale que le fichier n existe pas ou qu il est inaccessible Il suffit de refaire la commande apr s avoir apport les corrections n cessaires 0 4 5 Erreurs de syntaxe La plupart des erreurs de syntaxe sont suffisamment explicites pour qu on voit tout de suite de quoi il s agit Il suffit de se reporter la syntaxe Chapitre 1 pour avoir des explications compl mentaires Cependant certaines d entre elles m ritent un commentaire ProloglA 7 Prolog TA NAT LITE Prolog HERITAGE D buter avec Prolog RO 7 UNITE MAL PLACEE gt insert plat x gt viande boeuf gt M UNITE MAL PLACEE Cette erreur montre que la syntaxe n a pas t respect e Dans cet exemple il manque un argument IL MANQUE A LA FIN DE LA CHAINE gt insert viande boeuf gt MANQUE A LA FIN DE LA CHAINE Une chaine doit tenir sur une ligne si la fin de ligne n est pas masqu e On rappelle qu une cha ne commence et finit sur le caract re Si le caract re fait partie de la cha ne il doit tre doubl CE TERME NE PEUT PAS ETRE UNE TETE DE REGLE gt insert DE gt 75 gt v41 v60 CE TERME NE PEUT PAS ETRE UNE TETE DE REGLE Le seul acc s l gal un
47. N B Lorsque le r cup rateur de l espace du code est activ toutes les r gles en cours d utilisation dans l effacement courant sont consid r es comme devant tre conserv es m me si elles ont t pr c demment supprim es et sont donc inaccessibles pour une nouvelle ex cution N B Le r cup rateur d espace doit d terminer les objets inutiles pour pouvoir r utiliser leur place Les structures succeptibles d tre manipul es depuis un langage externe et sur lesquelles le r cup rateur d espace peut agir sont les identificateurs Prolog Pour permettre Prolog de savoir si un identificateur est toujours utile et pour viter l utilisateur de continuer manipuler une repr sentation ventuellement obsol te l utilisateur doit pr ciser Prolog s il utilise ou pas un identificateur particulier depuis l ext rieur afin que le r cup rateur d espace ne le supprime pas Ceci peut tre fait gr ce aux fonctions set permanent symbol et reset permanent symbol cf Chapitre 7 de ce manuel realloc x y d clenche la r allocation de l espace d sign par x d une taille r ajust e par le coefficient y x peut prendre les valeurs code dictionary stack heap trail selon qu il s agisse respectivement du code du dictionnaire de la pile de r cursion de la pile de copie ou de la pile de restauration y est un entier il indique le pourcentage d augmentation s il est positif ou de diminution s il est n gatif
48. Prolog La compatibilit ascendante des versions est toujours assur e Si err_nb est positionn une valeur strictement positive alors une commande quivalente la commande Prolog block exit err nb est ex cut e Pour y associer un message ajoutez la ligne correspondante dans le fichier err fxt sous la forme Num ro Texte d crivant l erreur La r gle pr d finie ms_err permet d acc der au message associ un num ro donn Les num ros d erreurs inf rieurs 1000 sont r serv s pour Prolog les nombres sup rieurs 1000 sont disponibles pour l utilisateur Quelques d finitions actuelles de messages d erreur concernant les modules externes sont 500 ERREUR DANS UNE REGLE PREDEFINIE 501 ARGUMENT ERRONE DANS LE MODULE UTILISATEUR 502 VALEUR HORS LIMITES DANS LE MODULE UTILISATEUR 503 CHAINE TROP LONGUE DANS LE MODULE UTILISATEUR 520 get term TABLEAU TROP PETIT POUR CODER LE TERME 521 get term TABLEAU DES CHAINES TROP PETIT 522 get term TABLEAU DES REELS TROP PETIT 523 put term INDEX ERRONE DANS LE TABLEAU DES TERMES gt indique qu un tag de type T ou D correspond une valeur en dehors des index possibles pour le tableau val fab 524 put term INDEX ERRONE DANS LE TABLEAU DES CHAINES gt indique qu un tag de type S correspond une valeur en dehors des index possibles pour le tableau des cha nes 525 put term INDEX ERRONE DANS LE TABLEAU DES REELS gt indique qu un tag de type R corr
49. Prolog retourne les valeurs sous forme d identificateur PrologIA 5 Z Dro 4 TE FQ ITA JE VW UIUC J Prolog LIE PIT AZT AEN AGE Primitives graphiques U5 27 gr_get pen l m gr_get pen l h m Renseigne sur la taille et le motif du crayon de l unit graphique courante Lh m ont la m me signification que dans la primitive gr pen l h m Prolog retourne un identificateur pour le motif du crayon gr_stringwidth s n Unifie n avec la longueur en pixels de la cha ne s en fonction de la fonte de la taille et du style d finis pour l unit graphique courante gr_mode b m D finit le mode d application du motif sur le fond pour l unit courante graphique b 0 Concerne le dessin et donc le motif du crayon b 1 Concerne le texte et donc le motif correspondant chaque caract re 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 occuper 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
50. RO 4 Manuel de R f rence HERI J Prolog LITE Faisons quelques essais avec ce programme La question Quels sont les plats se traduit par gt plat p p Grillade_de_boeuf p Poulet_au_tilleul p Bar_aux_algues p Chapon_farci Quels sont les hors d oeuvres gt hors_d_oeuvre x x Artichauts M lanie x Truffes_sous_le sel x Cresson oeuf poche Cette le on s arr te l et on sauve le module courant module avec le pr fixe gt save menu mo quit BY Chose rates Note On peut utiliser galement la commande exit en sortant Prolog sauve l tat courant dans un fichier nomm par d faut prolog po Le module sauv nous servira dans la le on suivante 0 3 Le on 3 L Editeur Le but de cette le on est de montrer une fa on tr s simple de travailler avec l diteur int gr Prolog au niveau d un paquet de r gles Sur les machines poss dant un environnement fen trage et souris l utilisation de copier coller peut tre plus commode On commence par lancer Prolog et charger le module sauv contenant le programme menu p2 si l on a sauv avec save gt load menu mo gt Si l on est sorti avec exit on commence par lancer Prolog avec l tat sauv prolog po contenant le programme menu p2 tel que nous l avons laiss la fin de la le on pr c dente Supposons que l on veuille changer notre menu et remplacer les r gles viande Grillade_d
51. WORD 2 OP Re GUCAIG ESS RL nn ere R10 15 103 3 SOES Len SR A a ne En R10 17 10 65 L nvironnementsiss cs ds a in Sn cuit R10 19 10 7 Traduction de DOG UE St Rent R 10 20 ProloglA vii viii Manuel de R f rence PrologIA J Prolog LIE RYT AIEEE CIS LATE G n ralit s ix Introduction Les besoins des utilisateurs de l Intelligence Artificielle voluent En devenant industriels les programmes sont de plus en plus gros manipulent d importantes quantit s de donn es communiquent avec d autres logiciels Pour r pondre cette demande PrologIA propose un nouveau syst me PrologIl Tout en conservant les caract ristiques qui ont fait le succ s de Prolog II les plus offerts par ce produit sont e performances e modularit e standardisation e ouverture vers l ext rieur e environnement de programmation e interface graphique Standardisation e Choix d un Mode standard s inspirant fortement des derni res d cisions des groupes de normalisation pour la norme ISO Prolog Performances e Compilation incr mentale parfaitement transparente permettant de b n ficier de la vitesse d un langage compil sans avoir renoncer la souplesse d un langage interpret e Optimisation de la r cursivit terminale permettant de programmer r cursivement c est dire de la mani re la plus naturelle en Prolog les processus it ratifs et cela sans d bordement de la m moire e R cup ration dynam
52. b Figure 1 5 Ces ensembles tant finis il s agit donc d arbres rationnels Le fait qu un arbre rationnel contienne un ensemble fini de sous arbres donne un moyen imm diat de le repr senter par un diagramme fini il suffit de fusionner tous les n uds d o partent les m mes sous arbres figure 1 6 Figure 1 6 PrologIA Prolog HERITAGE El ments de base R 1 13 Si on ne fait pas toutes les fusions on obtient la figure 1 7 prus sms Casas Figure 1 7 Il faut donc se m fier du fait que des diagrammes diff rents puissent repr senter le m me arbre Pour repr senter les arbres nous utiliserons des formules appel es termes Nous introduirons tout d abord la notion de terme strict strict_term variable identifier constant lt gt i strict_termP strict term strict term strict _termE strict term strict term strict_termP lt strict term strict term gt strict _termE lt gt strict term strict term Les termes stricts sont les vrais termes Cependant pour des raisons de commodit on tend la syntaxe des termes stricts sans en alt rer le sens en permettant eP d ajouter et d enlever des parenth ses mais en convenant que 11 12 tn repr sente t t2 tn d ajouter et d enlever des crochets mais en convenant que t1 t2 tn repr sente t1 12 tn J e
53. c dence on utilise les r gles de parenth sage La syntaxe des expressions avec op rateurs et les op rateurs pr d finis sont donn s section 1 9 2 de ce manuel Exemple op rateur binaire de pr c dence 400 parenth sage gauche d abord op rateur binaire de pr c dence 500 parenth sage gauche d abord expression 3 2 1 4 3 expression non ambigu 3 2 1 4 3 arbre Prolog sub sub 3 2 div div 1 4 3 Il faut remarquer que si la notation avec op rateur est plus l g re son abus peut mener une r elle difficult de compr hension des arbres effectivement repr sent s par des expressions contenant des op rateurs peu usit s op n il s op n il s i2 D clarent l op rateur s avec la pr c dence n 0 lt n lt 1200 et le type de parenth sage i s est un identificateur ou une cha ne repr sentant un symbole graphique Dans la forme 3 arguments s peut tre une liste la d claration s applique alors chaque l ment de la liste La forme 3 arguments est aussi une directive de compilation c est dire que la d claration d un op rateur peut aussi se faire au milieu d un source que l on compile Le symbole fonctionnel repr sent par s est i2 si celui ci est d fini sinon le symbole s quot L associativit i est pr cis e par un identificateur combinant deux ou trois des lettres fx y avec les conventions suivantes f repr sente l op rateur x repr sente une expression de p
54. d fini de la famille sys PrologIA J Prolog LIE RITA EE LEP YAO Z J Prolog LE RYT AEE CLIVE LITE unit identifier identifier identifier identifier abbreviated_id abbreviated_id variable extended_var extended_var prefix constant integer_number integer_number integer_number integer_number integer_number real number real number string name digits graphic_symbol graphic_symbol comment comment comment El ments de base R1 25 identifier separator variable constant graphic_symbol prefix prefix_limit abbreviated id abbreviated _id prefix prefix limit graphic symbol graphic symbol name extended var mi character mi My m mo n _ alpha extended _var letter digit _ alpha big_letter alpha name prefix_limit name integer number real number string digits 0b binary number 0o octal number Ox hex number 0 character digits digits PE E e D d digits digits digits nc Cee Ded digits Way string char letter alpha digit digit gt graphic c graphic_c graphic c x character N character character newline ProloglA R 1 26 1 9
55. d finissent ce que dans beaucoup d autres langages de programmation on appelle identificateur Nous retiendrons que dans la syntaxe Prolog II les variables commencent par une seule lettre ou par le caract re tandis que les repr sentations abr g es d identificateurs commencent par au moins deux lettres Dans la syntaxe Edinburgh la diff renciation se fait sur le premier caract re qui doit tre une lettre majuscule ou le caract re _ pour repr senter une variable ou bien une lettre minuscule pour repr senter un identificateur en notation abr g e Dans cette syntaxe les repr sentations abr g es d identificateurs peuvent galement tre des suites de caract res graphiques Voici des exemples d identificateurs abr g s corrects Syntaxe Prolog II Syntaxe Edinburgh pomme il0 pomme pomme pommel2 FE PrologIA J Prolog WTA NATE LITE J Prolog LIE PIT AZT AEN AGE El ments de base R1 7 des exemples d identificateurs incorrects Syntaxe Prolog II Syntaxe Edinburgh x Pomme ler_lapin ler_lapin yena pomme l herbe Nombres La syntaxe des nombres en Prolog II est sensiblement la m me que dans la plupart des langages de programmation Les nombres entiers sont sign s et permettent de repr senter a priori des valeurs quelconques Plusieurs syntaxes d entiers sont accept es Un entier peut tre exprim dans les bases suivantes 2 8 10 16 Pour cela la mantisse de l entier ser
56. es sont supprim es Note Il peut arriver que le texte que vous venez d diter comporte une erreur difficile d celer Sachez qu la suite d une utilisation de l diteur r sident un fichier nomm PROEDIT PRO a t cr dans le r pertoire courant il contient les r gles dit es dans leur tat final Ce fichier peut vous aider reconstituer l tat courant de votre programme Pour cela abandonnez l dition Vous vous retrouvez alors sous Prolog sans les r gles dit es non encore lues Sauvez ce programme et hors Prolog utilisez un diteur de textes pour analyser le morceau manquant depuis PROEDIT PRO 6 3 2 Editer et recompiler un module source Cette fonctionnalit permet de modifier et recompiler le texte source d un module d j charg l dition se fait avec la mise en forme originale editm m m est une cha ne Supprime toutes les r gles du module m et lance l dition du fichier source correspondant La version dit e est recompil e et vient remplacer l ancienne version Si le fichier source ne peut tre trouv alors l dition se fait sur un source cr par d compilation du module Ce fichier source est appel PROEDIT Mx o x est un num ro engendr par Prolog et de valeur diff rente pour des modules de nom diff rent Note Les r gles qui auraient pu tre ajout es par insert ou assert dans le module pendant l ex cution sont effac es avant rechargement du module Prolo
57. et sera lanc par la machine de mani re asynchrone Le succ s de la requ te traduit celui de la transmission et non celui du but transmis On ne consid re pas ici la r cup ration des solutions Les messages d erreur ventuels de Prolog se manifestent dans l unit de sortie courante par d faut la console et ne sont pas transmis au Client L unification des variables du but transmis ne produit aucune trace Seules les critures explicites seront visibles Limitation La donn e but_prolog est limit e 32767 caract res et doit avoir la forme d un but unique et non pas une suite ou liste de buts respectant la syntaxe en cours sinon une erreur est g n r e Exemples r ponses de la console de Prolog II quelques requ tes Requ te Poke sur l Item Lily was here avec la donn e You won t see me gt get_event 0 x y x extern event Lily was here 0 0 y 0 gt Requ te Execute avec donn e please anser me gt please 1 APPEL A UNE REGLE NON DEFINIE gt Requ te Execute avec donn e enum i 15 gt il ne se passe rien de visible Requ te Execute avec donn e outml Hello Hello gt mais pas d affichage de ProloglA U4 6 Manuel d Utilisation Windows 4 2 3 Ex cution d un but Prolog avec r cup ration des solutions La donn e transmise par la requ te Execute accepte une seconde syntaxe dont la description suit but_prolog Index Identifi
58. finies constitue un environnement de programmation tr s complet permettant notamment e de contr ler et de modifier le d roulement d un programme chapitre 2 Le contr le de l effacement des buts e de structurer et modifier l ensemble de r gles qui constituent le programme Prolog courant chapitre 3 Structuration et modification des r gles e d avoir acc s aux fonctions classiques d arithm tique et de traitement de cha nes chapitre 4 Op rations pr d finies sur les donn es e de g rer les entr es sorties chapitre 5 Les entr es sorties e de communiquer avec le syst me h te chapitre 6 L environnement ProloglA Prolog R1 20 Manuel de R f rence HERITAGE Il est galement possible au programmeur averti d introduire de nouvelles r gles pr d finies qui font r f rence de nouveaux parasites qui seront crits dans un autre langage que Prolog C FORTRAN Pascal Voir chapitre 7 Extensions avec des langages externes ou Annexe D Ajout de r gles externes m thode des parasites Deux r gles pr d finies ont un lien troit avec le m canisme de base de Prolog II dif et eq La r gle dif est la plus importante C est elle qui permet d introduire les in quations dans les syst mes d quations et d in quations Plus pr cis ment l ex cution de dif x y ajoute l in quation x y au syst me Sj et v rifie que le nouveau syst me Sj a
59. gle par op rateur ou symbole fonctionnel et s exprime de mani re tr s naturelle Par exemple la d riv e de l expression pr c dente est donn e par gt read p expression e lt p nil gt derivee e x e 3 x2 6 x 5 ProloglA 7 Prolog RYT ASEIE UE Quelques exemples de programmes Prolog II C 9 e plus plus plus mult 3 mult 2 mult 1 exp x minus 2 1 1 mult exp x 2 0 plus mult 6 1 mult x 0 0 Comme on le voit le r sultat est loin d tre simplifi Nous avons donc adjoint un programme de simplification tr s incomplet qui permet d obtenir une criture plus condens e Tout cela est r sum par le pr dicat run dont voici un exemple d utilisation gt run l expression 3 x 2 6 x 5 a pour derivee 6 x 6 gt run l expression cos 3 x 2 2 a pour derivee 6 x sin 3 x 2 2 C 3 Les mutants Il s agit de produire des mutants issus d animaux diff rents Pour cela les animaux sont connus par leur nom sous forme de cha ne de caract res Deux animaux donnent naissance un mutant si la fin du nom du premier animal est identique au d but du nom du second L aspect int ressant de ce programme est qu on utilise une m me relation conc de deux fa ons diff rentes d une part pour r unir deux listes d autre part pour d composer une liste en deux sous listes Voici les r sultats produits en partant de l ensemble d animaux alligator tortue
60. gt 4 3 2 Programmer un applicatif Serveur DDE Ce mode est plus contraignant car un Serveur doit savoir tre la compl te disposition de Clients quelconques et aussi viter tout conflit d int r ts avec d autres Serveurs Donc il importe en premier lieu de d finir formellement puis de doter de noms pertinents toutes les commandes qu il pourra recevoir Son mode d emploi devra tre tr s complet Primitive de d claration ddeDeclareAsServer lt _nMode _tService gt D clare si_nMode vaut ddeOpen ou supprime si_nMode vaut ddeClose le Service DDE nomm par la cha ne de caract res Service Si_ Service est une variable libre et_nMode vaut ddeClose termine chaque Service d clar backtracking en l unifiant avec Service La suppression d un Service renvoie brutalement tous les Clients qui s y sont connect s Ceci devrait tre vit en terminant au pr alable toutes les conversations concern es Primitives de connexion et de d connexion ddeAcceptClient _ Service _tTopic _hConversation Accepte la requ te du Client en cours de connexion cette primitive devant tre invoqu e durant l effacement du but callback ddeCbClientWantsServer 2 Les arguments Service et_ Topic sont des cha nes de caract res transmises par ce but callback Si aucun probl me syst me ne survient l argument _hConversation sera unifi avec une valeur enti re unique identifiant cette conversation pour toute op ration future
61. gt age 99 gt age 15 gt age 114 gt age 87 gt age 96 gt age 34 gt ville constantinople gt ville aspres sur buech gt ville severac le chateau gt ville cucugnan gt ville pampelune gt ville loyola gt ville jerusalem gt ville smyrne gt ville kartoum gt booleen oui gt booleen non gt 3 listes des formules atomiques atomique atomique atomique atomique atomique atomique habite a x y gt est_age_de x y gt lunette x y gt plus age x y gt inferieur x y gt different x y gt Be ee eee ee ew 4 evaluation des formules atomiques habite a x y gt individu x a y b est_age de x y gt individu x y v b plus_age x y gt individu x a v b individu y a v b val inf a a 1 lunette x y gt individu x a v y inferieur x y gt val inf x y 1 different x y gt dif x y 5 evaluation des formules vrai p gt atomique p p vrai non p gt non vrai p vrai et p q gt vrai p vrai q vrai ou p q gt vrai p vrai ou p q gt vrai q Re lxt D gt type x t vrai p vrai tout x t p gt non vrai existe x t non p ProloglA J Prolog ERITAGE C 5 Quelques exemples de programmes Prolog I C 13 6 definitions utiles non p gt p fail non p gt 7 calcul des repo
62. l type droit 0 1 Le on 1 Lancement de Prolog Lancez Prolog ceci le fait d marrer partir d un tat sauv initial nomm initial po Le caract re gt repr sente le prompt de Prolog Les diff rentes possibilit s de d marrage sont d crites dans le manuel d Utilisation Prolog affiche alors sur l cran Prolog II Version Code PrologIA gt Le caract re gt indique l utilisateur qu il est sous Prolog et que le syst me est en attente de commande Pour commencer essayons une commande simple imprimons le message Hello World gt out Hello World line Hello World gt Entrons maintenant un premier petit programme pour cela on se met en mode insertion de r gles commande insert Le syst me est alors pr t lire des r gles ou des commentaires et les enregistre en m moire au fur et mesure Par exemple on entre trois r gles qui expriment que Pierre Jean et Marie habitent respectivement Paris Marseille et Paris gt insert habite a Pierre Paris gt habite a Jean Marseille gt habite a Marie Paris gt ProloglA RO 2 Manuel de R f rence gt Remarquez que chaque r gle est termin e par le caract re et que l insertion se termine par un suppl mentaire Les r gles sont ins r es dans l ordre o on les a tap es On s en assure en tapant la commande list qui affiche les r gles du module courant gt list habite a Pierre
63. la table du code ASCII US Si un programme Prolog ne contient pas de caract res tendus il est inutile de faire des transformations entre ISO et h te Le fait de vouloir utiliser des caract res qui n existent pas sur la machine h te impose d une part choisir le mode ISO d autre part pour les communications soit les transmettre en ISO soit les transmettre sous forme imprimable print string Le mode ISO sans accent escape comme le mode h te r duit le nombre de caract res qui peuvent cr er une ambiguit d interpr tation s ils sont pr c d s du caract re Ce mode peut donc viter aux programmes qui utilisent beaucoup de de masquer ce utile pour les programmes Edinburgh qui manipulent assez souvent des identificateurs ou graphic symbol contenant des E 5 Conventions pour le mode ISO Les donn es partag es entre Prolog et les langages externes d crites dans les EXTERNAL DESCRIPTOR doivent tre cod es en ISO La fonction PRO BIND qui permet de cr er dynamiquement une zone de donn es partag es r f rence des donn es qui doivent tre cod es en ISO par contre son premier argument qui est le nom Prolog de la zone de donn es est une cha ne h te ProloglA E 4 Annexe E Les changes de cha nes par pipe entre Prolog et des coprocessus sont consid r s comme des entr es sorties et doivent donc tre des cha nes h tes sous forme imprimable Les fonctions concern es
64. marrage automatique d un programme Prolog Edition de programmes Date temps et mesures Lien avec le syst me Utilisation du debugger Modification et visualisation de l tat courant Gestion automatique des espaces et des piles Parmi les r gles pr d finies qui permettent l utilisateur de communiquer avec l ext rieur de Prolog ce chapitre d crit celles qui sont ind pendantes du syst me particulier utilis Celles qui au contraire d pendent de l implantation consid r e sont d crites dans le manuel d utilisation 6 1 Comment sortir de Prolog exit exit s Fait sortir de Prolog en sauvant la totalit des programmes couramment connus y compris ceux qui constituent le superviseur Prolog I La sauvegarde est faite dans le fichier de nom s ou bien pour la forme sans argument dans le fichier de nom prolog po Remarque Il est possible de sauver uniquement les modules que vous avez cr s ou modifi s pendant la session commande save cf paragraphe 3 7 et de quitter Prolog en faisant la commande quit quit quit n Fait quitter Prolog sans rien sauver La valeur n est envoy e au syst me d exploitation titre de statut de terminaison Quelque soit ce syst me sin vaut 0 alors la valeur envoy e est celle qui correspond pas d erreur cette valeur peut tre non nulle La premi re forme quit quivaut quit 0 6 2 D marrage automatique d un programme Prolog Si l tat binaire sur lequel Pr
65. n n 0 K 3 ECALL 2 dessert v743 BG RC dessert Fraises chantilly CALL value Truffes sous le sel Grillade de boeuf Fraises chantilly v817 On ne veut pas s arr ter dans ce pr dicat mais voir ce qui s y passe DBG N value Truffes sous le sel Grillade de boeuf Fraises chantilly v817 CALL calories Truffes sous le sel v828 calories Truffes sous le sel 212 CALL calories Grillade de boeuf v833 calories Grillade de boeuf 532 CALL calories Fraises chantilly v838 calories Fraises chantilly 289 CALL sumof 212 532 289 v817 Les expressions arithm tiques ont t optimis es la compilation add add sumof 212 532 289 1033 CALL smaller 1033 800 DBG N inf RECALL 3 dessert v743 DBG RC dessert Melon en surprise CALL value Truffes sous le sel Grillade de boeuf Melon en surprise v817 On v rifie la position du pr dicat DBG w gt balanced meal 3 rule number 1 goal number 2 in queue Pour la suite le d tail du pr dicat n est pas int ressant on supprime son d veloppement et on v rifie la liste des pr dicats dans ce cas DBG gt value 4 DBG j value 4 On poursuit DBG n value Truffes sous le sel Grillade de boeuf Melon en surprise 866 CALL smaller 866 800 DBG gt smaller 2 DBG j smaller 2 value 4 DBG n RECALL 2 dessert v743 ProloglA 7 Prolog CRITAFE TT L envi
66. p non existentielles et n apparaissant pas dans le terme x unifie avec la liste de toutes les solutions x lorsqu on efface p Chaque liste est tri e et sans r p tition L ordre de la liste est identique celui d fini sur les termes cf term_cmp 3 Exemple Prolog contenant la base de r gles suivante aa 2 1 gt aa 1 2 gt aa 1 1 gt aa 2 2 gt aa 2 1 gt gt setof X aa X Y L Vol Le 1 2 nil Y 2 L 1 2 nil gt setof X Y aa X Y L L 1 2 nil gt or x y D finit un ou logique transparent la coupure Exemple gt op 900 xfy or gt enum i 4 eq i 1 or eq i 2 i 1 i 2 gt enum i 4 feq i 3 or outli no fail no 1 3 2 2 Geler Il s agit de r soudre de mani re efficace un probl me qui se pose souvent en Prolog retarder le plus possible certaines d cisions Ce qui revient dire qu il faut avoir suffisamment d information avant de poursuivre l ex cution d un programme ou que certaines variables doivent avoir re u une valeur pour pouvoir continuer On profite alors des avantages de la programmation d clarative tout en gardant une ex cution efficace ProloglA J R2 10 Manuel de R f rence 7 elig freeze x q Le but de cette r gle pr d finie est de retarder l effacement de q tant que x est inconnu Plus pr cis ment 1 Six est libre alors freeze x q s efface et l effacement de q est mis en attente
67. par le r cup rateur de m moire un num ro de variable libre Le num ro est unique pour un tat donn de la machine voir 7 3 Si deux num ros sont diff rents il s agit de deux variables libres diff rentes c est dire non li es entre elles Dans un m me appel de proc dure externe ces num ros sont coh rents pour diff rents appels des fonctions get_term et put_term Entre deux activations ou deux tats il n y a aucun lien entre ces num ros De nouvelles variables peuvent tre cr es en appelant put_term avec des num ros non encore utilis s Il est plus efficace de cr er des num ros en ordre croissant par rapport aux num ros d j attribu s Prolog attribue ces num ros par incr ments de 1 D un index dans les tableaux de terme sous termes vers une s quence de sous termes La s quence point e est termin e par E ou F suivant le cas ProloglA Extensions avec des langages externes R 7 13 2 J Prolog LIE RYT AIEEE EI LATE tag valeur T un index dans les tableaux de terme sous termes tag_tab et val tab Pointe sur une suite de termes dont le premier est un entier repr sentant le nombre d arguments n du n uplet suivi des n sous termes repr sentant les arguments E ind finie Marque la fin d une s quence se terminant par nil Cette marque peut tre le premier l ment d une s quence point e par D fin s quence F ind finie Marque
68. 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 gef key r ussira de suite apr s avoir obtenu le caract re sans attendre que le d lai soit coul stty FL USH 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 R cup re la valeur d un param tre concernant le terminal gtty USEGETKEY v rend 0 ou un nombre sign de ticks gtty TERM x rend actuellement TTY ou MPW 5 8 4 Boites de choix gr _list r l Li v_i l_o v_o o La r gle gr list g re un choix d l ment s dans une liste Cette liste s affiche dans l unit graphique courante qui doit tre une fen tre Dans le cas contraire drawing area une erreur est g n r e Description des param tres r Le rectangle englobant ascenseurs compris de la forme lt x1 yl gt lt x2 y2 gt ou lt x1 y1 x2 y2
69. t d fini les variables les r els les entiers les identificateurs les chaines de caract res les n uplets de longueur lt 2 les listes les n uplets de longueur gt 2 ProloglA Dola ER A R4 15 Op rations pr d finies sur les donn es La comparaison de deux variables est fonction de leur date de cr ation La comparaison de deux entiers ou deux r els suit les r gles habituelles La comparaison de deux cha nes de caract res ou deux atomes suit l ordre alphanum rique La comparaison de deux listes est celle de la comparaison des deux premiers l ments trouv s diff rents La comparaison de deux n uplets s effectue d abord sur leur longueur et longueur gale sur la comparaison des deux premiers l ments trouv s diff rents Le pr dicat de comparaison est le suivant term_cmp X Y V Compare les termes X et Y unifie V avec l entier 1 si X pr c de Y 1 si Y pr c de X 0 si les termes X et Y sont formellement gaux Quelques exemples gt term cmp le0 1 V V 1 gt term_cmp foo zebra V V 1 gt term cmp short short V v 0 gt term_cmp shorter short V v 1 gt term cmp foo a foo b V V 1 gt term cmp foo aa foo bb V V 1 gt term_cmp X X V v 0 gt term cmp Y X V V 1 gt term cmp _ V V 1 gt term cmp foo foo V V 1 gt term cmp 1 2 3 nil 1 1 3 4 nil V V 1 gt term_cmp 1 2 nil lt 1 2 gt V V 1 g
70. taille y ISi le syst me de r allocation automatique n est pas d sactiv au d marrage de Prolog un certain nombre de r allocations se produiront avant le d bordement ProloglA es sf zelig Le contr le de l effacement des buts R2 3 choix1 c est tout gt choix2 x y gt couleur x taille y choix2 c est tout gt choix3 x y gt couleur x taille y choix3 c est tout gt choix4 x y gt couleur x taille y choix4 c est tout gt 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 On peut consid rer le comme une annotation que l on fait un programme 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 Des utilisations classiques du sont 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 I non I non p gt p fail non p gt Dans le cas de non montr ci dessus il faut remarquer que l on peut avoir des r sultats inattendus si p contient des variables libres C est ce que montr
71. tre sp cifi s dans un ordre quelconque ils permettent de modifier les tailles et les options par d faut du compilateur La liste des param tres possibles est H c n C file d n E f fv fv h n i file j file m file M n o file P parameter q n Q r file R n s n t n Signification des param tres H Help Affiche au d marrage de Prolog l aide de la ligne de commande Pour chaque option affiche galement la configuration par d faut c entier code D finit la taille en Ko utilis e pour l espace des r gles des variables statiques et des tableaux Prolog C file Compilation Compile le fichier source de nom file g n re un fichier objet et quitte Prolog La d termination du nom du fichier objet suit les r gles suivantes Si l option o est utilis e simultan ment c est le nom d sign dans cette option qui sera utilis Si le fichier source ne comporte aucun module c est le nom empty mo qui sera utilis Si le fichier source ne comporte qu un seul module c est ce nom de module suffix par mo qui sera utilis si cet unique module est le module vide c est le nom user mo qui sera utilis Si le fichier source comporte plusieurs modules c est le nom du fichier source suffix par mo qui sera utilis d entier dictionnaire D finit la taille en Ko utilis e pour le dictionnaire ProloglA 2 J Prolog LIE RITA EE COIL LAGE J
72. un identificateur de m me nom abr g qu un alias Il est donc aussi logique que le pr fixe de l alias soit ignor dans la directive N anmoins dans le cas o celui ci est d j d fini la lecture d une directive avec un alias explicitement pr fix dans le texte vitera sa substitution et permettra donc une red finition accompagn e d un message d avertissement Le pr dicat val permet la d finition d un alias au moyen d un autre alias Exemples comment s gt insert set_alias foo 44 set_alias foo 55 gt set_alias 44 55 Ici red finition de 44 en 55 ARGUMENT DE MAUVAIS TYPE gt insert set_alias macrol1 22 set_alias aa macrol 44 Ici le pr fixage est un moyen de red finition WARNING macrol DEJA DEFINIE NOUVELLE VALEUR PRISE EN COMPTE rgl1 macrol1 gt rg1 aa macrol gt gt insert Ici 2 me niveau d imbrication des compilations set _ alias macro2 val 2 macrol d finition partir d une autre macro rg2 macro2 gt rg2 macrol gt 7 Ici on revient au ler niveau de compilation macrol macro2 gt Ici protection automatique des t tes de r gle macrol macrol gt gt rg1 I 1 44 Ici la nouvelle valeur est bien prise en compte I aa macro1 Ici pas de substitution de l identificateur pr fix gt rg2 I 1 88 I 44 La macro d finie au ler niveau de compilation a t prise en compte dans le second niveau macrol I Vv I 88 La macr
73. unifiant s2 avec la cha ne s invers e ainsi que la r gle sys enumerate x b e qui unifie successivement x avec les entiers compris entre b et e Si l on veut utiliser le nom abr g il faut rajouter le nom dans le contexte ferm sys en effa ant la commande gt add_implicit sys reverse add_implicit sys enumerate include proext h include lt stdio h gt include lt string h gt define MAX STRING 512 int reverse EXTERNAL DESCRIPTOR descTable2 sys reverse C FUNCTION 2 POINTER reverse sys enumerate C FUNCTION BACKTRACK 3 POINTER enumerate 0 0 0 0 reverse ProloglA R 7 24 Manuel de r f rence int err i j 1g char c1 c MAX STRING if lg for if get_string 1 c amp err return err strlen c i 0 i lt lg 2 i put _string 2 c amp err return err return 0 typedef struct int direction current start end enumRecord EnumMemory int enumerate call long call EnumMemory mem int err if if if call CUT OF C BACKTRACK cut mem EnumMemory restore C backtrack data free mem return l 1 first call c mem constituera la m moire du pr dicat d un appel l autre mem EnumMemory malloc sizeof enumRecord get_integer 2 amp mem gt start amp err if err free mem return 253 get_integer 3 a
74. 11 NO RESIZE U 5 8 no resize U 5 8 no spy R 6 8 18 20 no trace R 6 7 18 J Prolog TRITATE V UIUC number R 10 6 numbervars R 10 19 number chars R 10 10 number codes R 10 10 obdialog mo U 1 3 OFFSET ZERO BASED R 7 18 omodule R 3 16 once R 10 4 op R5 15 open R 10 13 op rateurs R 1 15 22 op rateurs R 5 15 optimisations R 2 5 11 optimisations R 3 20 optimisations R 4 3 7 8 optimisations R 6 6 option fermeture U 5 11 orR2 9 outR 5 9 outlR 5 9 outm R 5 10 outml R 5 10 output R 5 13 output R 10 13 output U 5 39 output is R 5 13 out equR 5 11 page R 5 11 paper R 5 11 paper U2 9 parent U 5 3 parent U5 17 past R 10 14 peek byte R 10 16 peek char R 10 16 peek code R 10 16 peek_ event U5 21 ProloglA J Prolog LIE PIT AZT AEN AGE phrase R 10 10 point d arr t R 6 7 Popup menu U 5 5 popup menu U 5 17 position R 10 13 predefined R 3 29 predicate U 5 18 prefix_limit R 3 7 prefix_limit R 7 15 princip c R 8 8 princip c U 1 4 princip c U3 4 princip obj U 1 4 print window U 5 11 PROEDIT PRO R 6 3 proentry c U 1 4 proentry c U 3 4 proentry obj U 1 4 proext h R 7 18 proext h U 1 4 ProFinal R 8 3 5 ProFinal U 3 4 prolink R 7 19 prolink bat U 1 5 prolink bat U 2 12 prolog U5 21 prolog def U 1 5 prolog def U 3 3 prolog exe U 1 3 prolog lib U 1 5 prolog log U2
75. 1d 200 x valeur 200 L utilisation des primitives suivantes n cessite le chargement pr alable du module de dessin d arbres voir 5 3 draw_equ t Dessine le syst me minimal d quations repr sentant un arbre fini ou infini Pour utiliser cette primitive il faut que le module de dessin d arbres soit charg ProloglA R5 12 Manuel de R f rence gt draw_equ aa bb cc dd bb cc dd aa v1026 v1026 v1026 bb cc dd draw_tree t Dessine l arbre fini sur l cran si le terminal a des possibilit s graphiques les symboles semi graphiques sont utilis s Pour utiliser cette primitive il faut que le module de dessin d arbres soit charg gt draw_tree aa bb cc dd bb cc dd aa bb bb cc dd cc dd draw_mode x Cette primitive ainsi que la suivante concernent la mani re dont les arbres sont dessin s En effet suivant le type d cran certains caract res semi graphiques sont utilis s pour obtenir des dessins d arbres plus jolis draw mode x fournit dans x une cha ne correspondant au type d cran utilis Les valeurs possibles de x sont d pendantes de la machine VT100 GRAPHICS TTY TTY qui correspond un cran sans possibilit graphique existe sur toutes les machines Pour utiliser cette primitive il faut que le module de dessin d arbres soit charg set_draw_mode x Permet de choisir le type d cran utilis p
76. 2 une liste de buts permettant de cr er l cran de dialogue d fini par D Exemple gendialog lt 100 100 gt 3 nil Hello buttonD nil b uts b uts va unifier b_uts avec la liste des buts effectuer pour la cr ation de ce dialogue et ensuite effacer ces buts gr_dialog D 11 12 gr_dialog P D 11 12 L utilisation de cette primitive n cessite le chargement pr alable du module obdialog mo Ce module contient le gestionnaire de dialogue Prolog II permettant de cr er et activer les dialogues d crits par l argument D Dans sa deuxi me forme la primitive gr dialog accepte un argument suppl mentaire P qui est une liste form e au choix par un doublet d entiers lt x y gt pour d terminer la position du coin sup rieur gauche du dialogue un entier 7 pour choisir la fonte du texte du dialogue i est comme pr cis dans la primitive gr font le terme title s o s est une cha ne de caract res d signant le titre de la fen tre de dialogue D est soit un arbre d crivant un dialogue soit l identificateur d une r gle unaire avec un tel arbre en argument est une liste ventuellement vide de paires nom de zone valeur initiale cette liste est utilis e pour d finir ou red finir le contenu des zones En sortie si 2 est une variable elle est unifi e avec la liste des couples nom de zone valeur_ finale du dialogue Si 2 est une liste de paires nom de zone X chaque paire est unifi e avec
77. 4 Manuel de R f rence Les caract res Les r gles dont le membre gauche est annot par I ne sont actives que lorsque le mode d ex cution de Prolog II est le mode ISO cf U2 3 Les r gles dont le membre gauche est annot par H ne sont actives que lorsque le mode d ex cution de Prolog I est le mode h te cf U2 3 Est d sign par host_ letter tout caract re du syst me h te commun ment admis comme lettre et qui n appartient pas au jeu ISO 8859 1 de la m me fa on est d sign par host graphic char tout caract re imprimable du syst me h te n tant ni un alpha ni un separator ni un special_char et inconnu du jeu ISO 8859 1 Une description adapt e au jeu de caract res de la machine h te sera donn e dans le manuel d utilisation au paragraphe 3 2 La r gle C6 2 et les r gles C7 2 et C8 1 repr sentent le m me ensemble de caract res mais elles ne sont pas valides simultan ment Celle annot e par P est valide en syntaxe Marseille celles annot es par E sont valides en syntaxe Edinburgh En changeant de syntaxe ces caract res ne jouent plus le m me r le La r gle CS est valide si le caract re qui d limite dans les identificateurs complets le pr fixe et le suffixe n a pas t red fini Il peut valoir alors un des caract res graphiques big letter AM leat TZ letter big letter a e Z NAN BR Z g a y T Wa letterH host_letter letterL il accent escape
78. 98 58 99 100 name ab L L 97 98 58 39 32 37 39 name I 97 98 58 99 100 I ab cd name M M ab number_chars N L Pits 97 98 58 39 32 37 39 Associe un nombre N la liste L des caract res qui le constituent R ciproquement consid re la liste L des caract res comme une entr e et y associe le nombre N imprim sous sa forme d cimale Exemples number chars L L 3 3 number chars 33 0 L 3 3 0 number chars X 3 X 3 3 number chars 3 3 number chars A A 25 number chars A A 3 number chars A A 15 number chars A A 97 number chars A A 4 2 number chars A A 4 2 38 y L 3 Qa o 1x o 4 PES 4 number_codes N L 131 EFEN 7 DE Fute CRE Re POT OM ye SES Faty MOT BONE DE ES a 1217 G te ipts MERS CHEN LE TS M me description que number _chars 2 mais L est une liste de codes internes codes ISO ou codes de la machine h te phrase X Y phrase X Y Z Essaie de d composer la liste Y en une phrase de la grammaire et un reste X doit tre une t te de r gle de grammaire Y et Z peuvent tre des variables libres ou des listes Enum re les solutions possibles en unifiant le reste avec Z La forme deux arguments phrase X Y quivaut phrase X Y Note Si Y ou Z sont des cha nes de caract
79. B 7 nl aliasi no index foo 2 no spy foo 2 nonvar 1 X not true number 10 number chars 123 X number chars X 1 2 3 number codes 123 X number codes X 49 50 51 once out foo op 900 fy not op 700 xfx eq open file read xX open file read X alias alias1 or eq X 3 out1 X fail out a b out_equ aa bb outl la b outm bonjour outm _ 30 outml The cat and the dog output myfile pro output myfile 1000 output_is myfile pro peek byte alias1 Xx peek char alias1 Xx peek code aliasi xX phrase somme X 1 2 31 phrase somme X 1 2 3 7Y predefined outm Ok prefix limit X ProloglA Annexe B put n put_byte n put_byte h n put_char c put_char h c put_code n put_code h n quit quit n R rad m read t read h t read_rule v1 v2 read_term t l read_term h t l read_unit v1 v2 real t realloc i n reconsult f recv_double n1 v2 recv_integer nl v2 recv_real n1 v2 recv_string nl v2 redef_array i n reinsert reinsert u reload s reload s 1 remove_implicit s1 s2 remove_sentence_terminator c repeat reset_chrono reset_cpu_time retract t1 12 retract t retractall T rule t1 t2 rule n t1 t2 rule n i t1 12 rule nb i n v S save l s save_state
80. EXTERNAL prouser desc 0 Table de descripteurs ProloglA Prolog TE RIT AIEEE Extensions avec des langages externes R 7 19 Une table de descripteurs est un tableau de descripteurs termin par un descripteur contenant 0 dans le champ name Par exemple EXTERNAL DESCRIPTOR sample desc term_vars C FUNCTION 2 POINTER term vars qsort DIRECT C FUNCTION 1 POINTER quicksort enumerate C_ FUNCTION BACKTRACK 3 POINTER enumerate 0 0 0 0 hi L utilisateur peut cr er autant de tables qu il le d sire le plus naturel est d en r aliser une par fichier externe 7 4 3 D claration dynamique La possibilit de cr er des associations d objets Prolog C dynamiquement est offerte grace a la fonction PRO_BIND Les objets externes doivent tre connus de l ex cutable Prolog c est dire que la machine Prolog doit tre tendue par des modules externes contenant ces objets par contre la cr ation de l objet Prolog et le lien avec cet objet sont faits l ex cution de la fonction PRO BIND Comme dans le cas de la d claration statique les objets Prolog ainsi cr s et leur lien avec l objet externe sont permanents durant toute la session Une fois la d claration faite il n est pas possible d en annuler l effet La fonction PRO BIND a 4 arguments chaque argument repr sentant un l ment n cessaire que nous avons identifi pr c demment int PRO BIND name t
81. O gt 10 2 Le contr le Xou X Equivalent not X X Y ou X Y Succ s si X est unifiable avec Y sinon chec Est d fini par la r gle cp X You X Y Succ s si X n est pas unifiable avec Y sinon chec Exemples Be 1 1 X 1 2 X Y 1 1 0 X gt You gt X Si alors Est d fini par la r gle les parenth ses ne servent qu am liorer la lisibilit X gt Y 25 Ty Ys X You X Y Et propositionnel X est ex cut puis Y X You X Y Ou propositionnel Est d fini par les r gles suivantes Note en Prolog II la coupure est transparente ProloglA R 10 4 Manuel de R f rence X Y ie Xe X Y Ms call X Est d fini par la r gle call X X catch G C R Lance l ex cution du but G Fait un succ s dans deux cas l ex cution de G r ussit sans interruption de type throw une interruption de type throw dont l argument s unifie avec l argument C se produit et l ex cution du but R r ussit Si l unification choue l interruption est propag e selon le m canisme de block block exit Exemples reconsult user foo X Y is X 2 throw test Y bar X X Y throw Y coo X throw X car X X 1 throw X g catch p B write h2 coo c p p throw b i catch foo 5 test Y true Y 10 catch bar 3 Z true Z 3 catch true C write foo throw bla gt bla bl
82. Prolog INT RITA CIS LATE E Utilisation de Prolog II Windows U2 5 Edinburgh active Prolog en mode de compatibilit Edinburgh cf Chapitre 10 du manuel de r f rence Est quivalent l option m edinburg mo Change la syntaxe et charge les nouvelles r gles pr d finies sp cifiques au mode Edinburgh La syntaxe Edinburgh suppose que la syntaxe des variables n est pas la syntaxe Prolog et la syntaxe des r els est la syntaxe standard Par cons quent l utilisation de cette option modifie la valeur des flags s v et r qui vaudra respectivement E E ou U et S Le traitement de cette option est r alis en dernier Par cons quent si par l option f les flags s et r sont sp cifi s ils seront ignor s et le flag v d fini P sera galement ignor Shins flags D finit les valeurs des options de comportement de Prolog Les valeurs par d faut des options sont quivalentes au param tre f alA0cle0g1G0ilolrPsSuWvPw1zU fv fv est une suite de couples de caract res o dans chaque couple le premier caract re d finit l option concern e le second d finit sa valeur Les options disponibles sont option valeurs possibles 0 1 0 1 C d D h H s S t T LM 0 1 0 1 0 1 c C d D s S 0 1 0 1 P S A C LS E F W EP U 0 1 2 U D a A c e 8 G i o r s u v w Z a atomes pr fix s La valeur d termine si l on doit attribuer automatiquement le pr fixe vide aux atomes en position d a
83. Prolog exit sauvera l tat du programme dans un fichier appel prolog po dans le r pertoire courant win prolog myfile po Cette commande lance le compilateur avec l tat initial myfile po Une erreur survient si un tel fichier n existe pas Au lancement Prolog cr e sa fen tre Application et la fen tre Console puis affiche sa banni re et des informations sur sa configuration puis charge l tat binaire de d marrage Le chargement termin Prolog se met en attente de commande Pour cela il affiche un prompt et attend une suite de buts pour l ex cuter Prolog fonctionnera dans ce mode jusqu sa terminaison produite par l ex cution du but quit ou exit 2 1 2 Arr t de Prolog Lorsque l on sort de Prolog en ex cutant la r gle pr d finie quit ou par un menu aucun tat n est sauvegard Lorsque l on sort de Prolog en ex cutant la r gle pr d finie exit l tat courant est sauvegard sous le nom prolog po Lorsque l on sort de Prolog en ex cutant la r gle pr d finie exit nom de fichier alors c est ce dernier nom qui sera utilis dans tous les cas pour l tat sauv produit 2 2 Espaces et tailles par d faut L espace de travail de Prolog est subdivis en plusieurs espaces Par d faut les tailles de ces espaces sont lues dans le fichier binaire initial moins d utiliser l option de la ligne de commande qui permet de changer le moyen de d terminer ces valeurs initiales qui sont alors Prolo
84. ProloglA U4 12 Manuel d Utilisation Windows ddeEndConversation _hConversation Termine la conversation _hConversation en cong diant le Client Si _hConversation est une variable libre termine par num ration toutes les conversations en cours en unifiant Conversation avec la conversation concern e L usage de cette primitive est naturel pour le Client Bien que possible l usage de cette primitive est priori tr s d plac pour le Serveur Il ne devrait tre utile qu en cas de probl me Primitive de transmission des donn es aux Clients ddeTransmitData _tTopic _tltem _xNewValue Doit tre invoqu e la demande d un Client donc durant l effacement du but callback ddeCbClientRequest 2 pour une requ te ddeRequestData pour transmettre _xNewValue la nouvelle valeur de l Item _t tem Peut tre invoqu e l initiative du Serveur pour transmettre soit la nouvelle valeur xNewValue de l Item _t tem lien chaud soit une notification aux Clients ayant demand un abonnement l Item modifi lien ti de auquel cas l argument xNewValue est ignor Le choix de notifier sur la base du Topic _tTopic et non chaque Client concern est impos par des contraintes d impl mentation La base de donn es interne assure la bonne distribution des notifications Buts callbacks M mes remarques que pour le mode Client ddeCbClientWantsServer _xService _tTopic Notifie une demande de connexion d un Client pour le To
85. X S efface si X est le Ni me l ment du terme T N entier et T tuple ou paire point e doivent tre connus au moment de l appel Si T est une paire point e alors si N 1 X est unifi avec le premier l ment de la paire N 2 X est unifi avec le deuxi me l ment de la paire Si N est un entier et T est un n uplet de taille M gt 1 alors si 0 lt N lt M X est unifi avec l argument N 1 du n uplet T c a d avec l argument N de T f a d dyy Sinon chec Exemple arg 1 eq john fred X X john arg 0 eq john fred Y atom_chars A L Associe un identificateur A la liste L des caract res qui le constituent et vice versa Le pr fixe de l identificateur A est ignor en entr e ou gal en sortie Exemples atom_chars L L atom_chars L L atom_chars ant L L a n t atom_chars Str s o p l Str sop ProloglA Prolog ERITAGE Extensions Edinburgh R 10 9 atom_codes A L Associe a un identificateur A la liste L des codes internes codes ISO ou codes de la machine h te qui le constituent et vice versa Le pr fixe de l identificateur A est ignor en entr e ou gal en sortie atom_concat A1 A2 A3 Fonctionne sur les identificateurs de la m me mani re que conc_string sur les cha nes de caract res Le pr fixe des identificateurs A A2 A3 sont ignor s en entr e ou gaux
86. aa X Y X Y Z lt gt Z U T aa _940 969 940 969 1042 1042 1208 L_V 940 969 1042 1208 L_VN X 940 Y 969 Z 1042 U 1208 S U _1208 see F Est quivalent input F Si F est un identificateur c est la cha ne correspondant a son abr viation qui est prise en compte comme nom d unit c a d le pr fixe est ignor seeing F Est quivalent a input_is F Si F est un identificateur c est la chaine correspondant a son abr viation qui est prise en compte comme nom d unit c a d le pr fixe est ignor seen Est quivalent close input set_input C Redirige l entr e courante vers l unit associ e au canal C 10 5 3 Sorties Si l argument d signant l unit de sortie est un argument en entr e on pourra utiliser indiff remment le n de canal ou bien l alias associ cette l unit Dans le cas contraire cas du pr dicat current _output 1 c est le n de canal qui sera rendu La plupart des pr dicats de sortie peuvent s utiliser soit sur l unit sp cifi e en argument n de canal alias soit sur l unit courante de sortie auquel cas l argument indiquant l unit est absent current_output C C est unifi avec le canal associ l unit de sortie courante Attention C ne sera pas un alias flush_output C flush output Equivalent au pr dicat flush 0 pour l unit de sortie associ e au canal C ProloglA Proley R10 18 Manuel d
87. attribuer a l objet une identification par d faut ce sera un entier au moment de sa cr ation en laissant une variable libre cette identification pourra tre utilis e ult rieurement pour toutes les primitives de gestion de l objet Ou encore pour les objets qui ne sont pas des fen tres il peut les nommer l aide d un identificateur qui sera valable pour toutes les primitives agissant sur ces objets 5 2 Primitives de gestion des fen tres 5 2 1 Cr ation destruction d une fen tre new_window s t new_window s t s new_window s t v r new_window s t v s r new_window s t v x1 y1 x2 y2 new_window s t v s x1 y1 x2 y2 Cr ent une nouvelle fen tre et une nouvelle unit d entr e sortie de noms et de type f o s est l identification de la fen tre qui doit tre diff rente de celles des unit s existant d j s peut tre une cha ne Si s est une variable libre au moment de l appel elle sera unifi e avec une identification de fen tre fournie par Prolog La cha ne de caract res s est affich e dans le bandeau de la fen tre comme titre de la fen tre si s n est pas sp cifi e c est s qui est inscrite v est un bool en 1 ou 0 indiquant si la fen tre doit tre visible ou pas Par d faut la fen tre est cr e visible xl yl sont les coordonn es du coin int rieur sup rieur gauche de la nouvelle fen tre par rapport l cran x2 y2 sont les coordonn es du coin int rieur inf rieur droit de la n
88. b block exit e provoque l abandon imm diat de l effacement de tous les buts inclus entre les parenth ses tiquet es par e et supprime tous les choix ventuels en attente pour ces buts L effacement continue ensuite normalement apr s les parenth ses tiquet es par e De plus Une tiquette est un terme Prolog quelconque et on consid re que deux parenth ses tiquet es sont identiques si leurs tiquettes respectives sont unifiables S il y a plusieurs parenth ses tiquet es par e block exit e s arr te au couple de parenth ses le plus interne Si block exit e ne rencontre pas de parenth ses e alors on revient au niveau de commande avec le message d erreur correspondant e si e est un entier ou le message block exit SANS block CORRESPONDANT si e n est pas un entier ProloglA J Prolog LIE RITA EE LEP YAO J Prolog LIE PIT AZT AEN AGE Le contr le de l effacement des buts R2 5 C est ce m me m canisme qui est utilis pour la gestion des erreurs dans Prolog Une erreur rencontr e dans l ex cution de Prolog provoque l effacement du but block exit i o i est un entier correspondant au num ro de l erreur De cette mani re l utilisateur peut r cup rer toutes les erreurs de Prolog pour pouvoir les traiter dans son application Lorsque les optimisations de compilation sont actives option f ol au lancement de Prolog la compilation de block est optimis e et la d comp
89. caribou ours cheval vache lapin pintade hibou bouquetin et ch vre gt joli mutant alligatortue caribours caribouquetin chevalligator chevalapin vacheval vachevre lapintade hibours hibouquetin gt et voici le programme avec l option f vU MUTANTS mutant _z gt animal _x animal _y conc _a _b x dif _b nil conc b c y dif _c nil Cone xy G z conc nil y y gt ProloglA C 10 C 4 Annexe C conc e x _ y e z gt cone x y z joli mutant gt mutant z expl z line fail expl nil gt expl _a _1 gt out _a expl _1 animal a l l i g a t o r nil gt animal t o r t u e nil gt animal c a r i b o u nil gt animal o u r s nil gt animal c h e v a l nil gt animal v a c h e nil gt animal l a p i n nil gt animal p i n t a d e nil gt animal h i b o u nil gt animal b o u q u e t i n nil gt animal c h e v r e nil gt Interrogation par evaluation d une formule logique Dans cet exemple on a constitu une banque de donn es portant sur des individus dont on conna t le nom l ge la ville d origine et le fait qu ils portent ou non des lunettes Tous ces renseignements sont r sum s par une assertion telle que individu candide 20 constantinople non gt qui indique que l individu nomm candide est g de 20 ans qu il est n a constantinople et ne porte pas de lunett
90. chaine e La valeur d un tableau externe ou interne indic est gale la valeur de l l ment correspondant de ce tableau Exemple def array tab 100 assign tab 50 3 gt val tab 50 x _x 3 e La valeur d un identificateur i est d finie comme suit 1 si un terme a t affect i au moyen de la r gle assign voir le paragraphe suivant alors la valeur de i est t 2 siin a pas fait l objet d une affectation pr alable alors la valeur de i est i lui m me Exemple gt assign un 1 gt val un x val deux y x 1 y deux ProloglA Prolog R4 4 Manuel de R f rence ERITAGE Certaines fonctions valuables peuvent aussi tre exprim es l aide d op rateurs Les fonctions valuables sont add fj t2 ou t1 12 valeur add t t2 valeur f1 valeur 2 Les valeurs de fr et f2 doivent tre de type entier ou r el sub t 12 ou 1 22 valeur sub t t2 valeur t1 valeur 72 Les valeurs de f1 et 2 doivent tre de type entier ou r el mul t 2 ou t 12 valeur mul t t2 valeur t valeur 72 Les valeurs de et 2 doivent tre de type entier ou r el div t1 N ou 11 0 valeur div t t2 valeur valeur 2 Les valeurs de f1 et 2 doivent tre de type entier ou r el mod t t2 ou t mod t2 valeur mod t t2 valeur t modulo valeur 72 mod modulo se diff rencie de rem remainder dans le cas o les op randes tl et t2 sont
91. compilation de certaines r gles les expressions arithm tiques les tests de type ou encore les pr dicats pr d finis val assign et block Ces optimisations permettent une ex cution plus efficace de ces r gles mais ont des cons quences sur le fonctionnement de certains autres pr dicats pr d finis tels que rule debug ou freeze Il existe alors une option d activation de Prolog II qui permet de supprimer ces optimisations de compilation voir ce sujet le Manuel d Utilisation ProloglA J Prolog LIE PIT AZT AEN AGE Structuration et modification des r gles R3 21 Pour minimiser le temps mis pour choisir une r gle qui servirait effacer un but particulier Prolog II au moment de la compilation d un paquet de r gles cr e une image du paquet dans laquelle il regroupe toutes les r gles dont le premier argument est de type et ou de valeur identique Il r alise ainsi plusieurs groupes de r gles disjoints et pour un m me but effacer les r gles d un seul des groupes seront choisies ou bien aucunes Ce traitement est appel l indexation Supprimer l indexation revient laisser toutes les r gles du paquet valides pour un choix Par convention on utilisera dans un programme et dans le texte qui suit le terme identificateur entier pour d signer un paquet de r gles dont la t te a pour identificateur d acc s identificateur et entier comme nombre d arguments Avant toute chose il est n cessaire de citer
92. conseill de manipuler des lignes moins longues Se rappeler que le Retour Chariot sera lu au m me titre que le caract re blanc par les primitives qui commencent par lire tous les espaces ProloglA 2 J Prolog TA NAT LITE J Prolog LIE PIT AZT AEN AGE Les entr es sorties R5 3 les espaces et les tabulations peuvent appara tre partout entre les unit s lexicales les cha nes les identificateurs les entiers et la mantisse des r els peuvent s crire sur plusieurs lignes en masquant le Retour Chariot par le caract re si l option d interpr tation du est active cf U2 3 5 1 1 R gles pour l entr e eol Test de fin de ligne en entr e Teste si une fin de ligne a t atteinte plus pr cis ment si le prochain caract re qui sera lu est une marque de fin de ligne alors eol s efface sinon l effacement de eol choue Exemple gt in char c eol a lt CR gt c a gt in_char c eol a lt space gt lt CR gt gt eof Test de fin d entr e Teste s il existe encore des caract res en entr e sur l unit courante Autrement dit teste si la prochaine lecture va provoquer l erreur 104 FIN DE FICHIER Si ce n est pas le cas l effacement de eof choue Ne peut videmment jamais s effacer sur la console ou dans une fen tre TTY puisque ce sont des unit s en mode terminal qui ont toujours des caract res ventuellement apr s saisie Exemple gt input fichier vide eo
93. d finissent deux syntaxes alternatives pour la notation des listes On a les quiva lences suivantes alb a b a b a b nil a b c d a b c d nil a b c d a b c d lt gt nil En syntaxe Prolog II les deux syntaxes de liste peuvent toujours tre m lang es dans les programmes a b c d nil a b c d 7 Certains termes admis au titre de directives ne sont pas des r gles pr d finies mais simplement des d clarations par exemple module end module Hs ne doivent pas dans ce cas tre pr c d s de gt ou comme il est dit dans les regles 2 1 et 2 2 Les op rateurs Les op rateurs permettent d tendre dynamiquement la syntaxe des termes On distingue les op rateurs pr fix s postfix s et infix s 10 prefix_Op a identifier graphic symbol 11 postfix _op identifier graphic symbol 12 infix_op gd identifier graphic symbol On notera que dans la syntaxe Prolog II les op rateurs ne sont pas autoris s au premier niveau des termes de la queue de r gle il faut parenth ser l expression dans ce cas En syntaxe Edinburgh il n y a pas de restriction Le type d op rateur est indiqu par une convention permettant de d finir la pr c dence des op randes en fonction de la pr c dence n de l op rateur PrologIA J Prolog TE RITA IEEE VW CE f J Bola TID ITA Y El ments de base R 1 23 fx n Pad d n 1 1 fy n Pad d n xf n Pre g n l
94. d avoir le m me code pour toutes les machines Par exemple en jeu ISO char code x a la m me valeur sur Macintosh et sur PC ce n est pas le cas lorsque l on choisit le jeu h te Avoir deux modes de codage c est aussi avoir deux types de fichiers binaires e Des fichiers contenant des cha nes cod es d apr s le code ISO e Des fichiers contenant des cha nes cod es avec les caract res du syst me h te Lors de la sauvegarde le codage choisi pour la session est m moris dans le fichier que l on cr e un message d avertissement s affichera au moment du chargement si le codage m moris dans le fichier binaire n est pas le m me que celui choisi pour la session en cours ProloglA E 2 Annexe E HERI 7 Prolog TA NAT LITE D autre part en mode ISO puisque Prolog manipule des donn es caract res qui peuvent ne pas exister sur la machine h te il faut leur associer une repr sentation externe suite de caract res pour les visualiser I existe deux modes de repr sentation des caract res accentu s n appartenant pas au jeu h te e Un mode dans lequel ils sont repr sent s par une s quence accent escape cf R1 31 qui est tr s lisible e Un mode dans lequel ils sont repr sent s par une s quence octale Le choix de ce mode se fait au lancement de Prolog et est valable pour toute la session voir le manuel d utilisation 2 3 Dans ce qui suit nous ferons la distinction entre une repr sentation inte
95. d invite DBG et attendre une commande sur chaque point d arr t L important pour avoir acc s l interpr teur de commande est de bien d finir les points d arr t On en distingue deux types e les points d arr t fixes ils subsistent tant que le mode debug est actif et tant qu ils ne sont pas d sactiv s par commande e les points d arr t momentan s ils ne sont valides que le temps d une commande qui d finit en fait le prochain point de contr le du debugger Un point d arr t se d finit sur un pr dicat le debugger s arr te ensuite d s que le programme courant fait appel ce pr dicat L arr t de la machine Prolog se fera donc au moment o le but doit tre effac avant que l unification avec la t te de la r gle choisie soit faite Des commandes sp cifiques ainsi que des pr dicats pr d finis permettent de d finir les points d arr t fixes Les points d arr t momentan s sont d finis implicitement par une commande de progression ou l activation du debugger ProloglA R6 8 Manuel de R f rence Quand la machine Prolog tourne avec le debugger actif une interruption utilisateur poste un point d arr t momentan sur le but courant et le mode interactif est r activ Les interruptions utilisateur sont ainsi intercept es et ne produisent pas d erreur Voir les commandes du debugger b et les r gles pr d finies spy no_spy show_spy 6 6 2 2 Progression dans le code La progressio
96. dans le prochain paragraphe Ceci permet d appeler des fonctions avec nombre et type d argument variables callC t1 callC t1 t2 tl est un terme repr sentant l appel du pr dicat Prolog avec ses param tres conform ment aux conventions choisies 2 est un terme repr sentant le r sultat Si 2 est nil le r sultat de la fonction est ignor La forme callC t1 est quivalente callC t1 nil Les fonctions qui peuvent tre appel es travers ce pr dicats sont les fonctions d crites par l utilisateur avec un descripteur dont le type est DIRECT_C_FUNCTION ainsi que les fonctions sprintf et sscanf qui sont pr d clar es Sous les syst mes permettant l implantation de la primitive lkload il est possible d appeler sans d claration des fonctions existant dans l environnement Prolog La primitive callC r alise alors dynamiquement le lien lors du premier appel Il faut pour cela que le fichier ex cutable prolog se trouve dans le r pertoire courant Exemples gt callC sscanf 123 81f lt R y gt y 1 230000000000000e 02 gt eq x 123 callC sscanf x 2f lt R y gt x 123 y 1 200000000000000e 01 gt eq f x 0 callC sscanf 12 12 f lt I x gt lt I y gt x 18 y 10 gt callC sprintf lt x 80 gt valeur 1d 200 x valeur 200 ProloglA J Prolog TA NAT LITE Z J Prolog LE RYT AEE CIS LATE Extensions avec des langages externes R 7 27 7 7 2 Conven
97. dans son paquet Exemple gt rule n conc x y Z q n 1 x nil z y q nil n 2 xX v172 v173 Z v172 v174 q conc v173 y v174 nil gt rule n conc x y z conc x y zZ 1 n 2 xX v263 x Z v263 z y y 1l nil gt rule 1 conc x y Z q x nil z y q nil gt rule n a t q Rechercher des r gles ayant un nom donn a doit tre un identificateur ou un tuple dont le ler argument est un identificateur Pour chacune des r gles ayant a pour identificateur d acc s cette r gle s efface apr s unification de n avec le rang de la r gle dans son paquet de avec la t te de la r gle et de q avec la queue de celle ci Ainsi cette forme de rule peut tre utilis e pour chercher des r gles dont on conna t le nom mais pas le mod le Exemple conc nil x2 x2 gt conc e xl x2 e r gt conc x1 x2 r conc x1 x2 x3 r gt conc x1 x2 u conc u x3 r gt rule n conc t q n 1 t conc v124 v125 v126 v127 q conc v124 v125 v128 cone v128 v126 v127 nil n 1 t cone nil v125 v125 q nil n 2 t conc v127 v128 v125 v127 v129 q conc v128 v125 v129 nil ProloglA 7 Prolog TAGE Prolog INT RITA LI LITE Structuration et modification des r gles R3 31 rule nb i a n rule nb i n Compter les r gles d un paquet Au moment de l appel 7 doit tre un identificateur et a un entier n est alors unifi avec le nombre de r gles composant le paquet dont le nom est et l arit nombre d argum
98. de la taille pr c dente ProloglA 7 Prolog TA NAT LITE J Prolog LIE PIT AZT AEN AGE 7 1 7 2 7 3 7 4 TS 7 6 Tel 7 Extensions de Prolog avec des langages externes Principes des fonctions de communication de donn es Fonctions de communication de donn es simples Fonctions de communication de termes quelconques M thode des descripteurs Donn es partag es Ajout de fonctions externes Ajout de fonctions externes appel direct Ce chapitre montre comment faire des liens avec des donn es externes ou comment ajouter de nouvelles r gles pr d finies crites en C ou tout autre langage compatible avec C Les exemples qui y sont d crits se trouvent d j dans le fichier expredef c du kit Un quivalent pour Fortran est donn dans le fichier fprouser eg du kit Pour tendre Prolog avec des fonctions d un langage externe il est n cessaire de disposer d un module de communication pour cr er un lien entre le pr dicat prolog et la fonction externe faire la transformation des donn es chang es entre la structure Prolog et la structure externe Diff rentes m thodes sont propos es pour r aliser ces deux traitements le lien se d finit en C c est la m thode des descripteurs d crite dans ce chapitre le lien se d finit en Prolog c est la m thode des parasites expos e en annexe D la transformation des donn es se fait en Prolog c est la m thode des descripteurs co
99. derivee v x v derivee mult u v x plus mult u v mult v u gt derivee u x u derivee v x v derivee exp u n x mult n mult u explu minus n 1 gt derivee u x u derivee minus u xX minus u gt derivee u x u derivee sin u x mult u cos u gt derivee u x u derivee cos u x minus mult u sin u gt derivee u x u r gles de simplification simplifier lt o_b x y gt u gt simplifier x x simplifier y y simp o_b x y u simplifier lt o u x gt u gt simplifier x x simp o u x u simplifier x x gt simp plus 0 x x gt simp plus x 0 xX gt simp minus x 0 xX gt simp minus 0 x y gt simp minus x y simp mult 0 x 0 gt simp mult x 0 0 gt simp mult 1 x x gt simp mult x 1 x gt simp exp x 0 1 gt simp mult minus x y u gt simp mult x y v simp minus v u simp mult x minus y u gt simp mult x y v simp minus v u simp exp x 1 x gt simp exp 0 x 0 gt simp exp 1 x 1 gt simp o b x y u gt dif o b exp integer x integer y evalCst lt o_b x y gt u simp o b x lt o b u v gt t gt simp o_b x u z simp o_b z v t simp o b x y lt o b x y gt gt simp minus 0 0 gt simp minus minus x x gt simp sin 0 0 gt simp cos 0 1 gt simp o u x lt O u x gt gt evalCst plus x y u gt val x y u evalCst minus x y u gt val x y
100. des diff rents tableaux Le principe de cette m thode est de sp cifier au moment de l installation du but la structure des arguments et les valeurs qui y sont int ressantes de fa on simplement les nommer l obtention d une solution plut t que faire une recherche algorithmique des sous_ termes voulus de la solution Les arguments du but appel peuvent tre un terme quelconque sauf infini et les valeurs extraire sont des termes simples tels que entier r el double identificateur ou cha ne 8 5 1 Description int new_pattern char but est une fonction avec en argument unique une cha ne de caract res repr sentant un terme Prolog qui est le but effacer et o les r sultats int ressants sont repr sent s par des formats La fonction retourne 0 si tout c est bien pass un num ro d erreur si une erreur s est produite Les diff rents formats accept s sont d pour les entiers s pour les cha nes de caract res f pour les r els simples F pour les r els doubles i pour les identificateurs sous forme d entier I powr les identificateurs sous forme de cha ne de caract res Voici un exemple d appels de new_pattern erreur new _pattern sys enum d 2 10 erreur new pattern essai lt i x y gt d 0 int get_formats int no char p1 char p2 est une fonction nombre variable d arguments o no le ler argument est un entier qui indique le num ro d ordre de la valeur a
101. des donn es par les fonctions d interfa age get_term put_term des fonctions de conversions entre la cl et la repr sentation de l identificateur cha ne de caract res peuvent tre n cessaires La fonction pro_symbol ou son quivalent en Fortran permet partir d une cha ne de caract res de construire l identificateur Prolog correspondant identificateur qui pourra par exemple faire partie d un terme qui sera transmis Prolog par la proc dure put_term La cha ne de caract res doit avoir la syntaxe d un identificateur Si la cha ne de caract res ne comprend pas de pr fixe c est une notation abr g e l identificateur cr sera fonction du contexte courant Voir ce propos le Chapitre 3 de ce manuel Si une erreur s est produite la fonction retourne la valeur 0 ProloglA A Prolog TE RITA VEE J Prolog RYT ASEIE Extensions avec des langages externes R 7 15 long pro_symbol str char str integer 8 function fprosymbol lg str integer 4 lg character str La fonction symbol_string ou son quivalent en Fortran permet d obtenir la repr sentation sous forme de chaine d un identificateur Prolog Cet identificateur aura t obtenu par une des fonctions de communication de termes gef term par exemple Les arguments fournis la fonction sont la cl key l adresse d une zone m moire o la cha ne pourra tre copi e str la longueur maximum de la cha ne de caract res copi e 1g_
102. dicat ne modifie donc pas les propri t s position et end_of stream de l unit Si une fin de fichier est rencontr e et que l unit a t ouverte avec l option eof action eof code X est unifi avec la valeur 1 read C X read X Lit le prochain terme se trouvant sur l unit associ e au canal C plus le premier caract re non blanc qui le suit Equivalent a in X _ sur l unit C Si une fin de fichier est rencontr e et que l unit a t ouverte avec l option eof _action eof code X est unifi avec la valeur end_of file Exemple read X 1 2 X 1 2 read_line C S N read_line S N read_line S Equivalent au pr dicat in l S N sur l unit associ e au canal C read_term C X O read_term X O M me chose que le pr dicat read mais l on peut en plus obtenir une liste d options prises parmi variables L_V o L_V sera la liste des variables du terme X ProloglA 5 Z Dro 4 LIE RITA YE LEI YAO Prolog INT RITA LI LITE Extensions Edinburgh R 10 17 variable names L_VN o L_VN sera le dictionnaire des variables du terme X Ce dictionnaire sera compos d l ments de la forme nom de la variable variable singletons L_S ou L_S sera le dictionnaire des variables qui n apparaissent qu une seule fois dans le terme X Ce dictionnaire sera compos d l ments de la forme nom de la variable variable Exemple read_term T variables L V variable names L VN singletons S
103. du Programme principal 3 5 Extensions en mode 16 bits 3 6 Utilisation de PrologII sous forme de DLL 3 1 Valeurs extr mes des constantes arithm tiques Les bool ens sont repr sent s par les entiers 0 et 1 Les valeurs des entiers manipul s dans Prolog ne sont pas limit es priori Les valeurs des entiers qui peuvent tre communiqu s avec un langage externe sont comprises entre 2 147 483 648 et 2 147 483 647 231 1 ceci correspond au type long int de C Les r els manipul s dans Prolog correspondent au type double de C IEEE 64 bits Les valeurs des doubles sont comprises entre 1 79e308 et 1 79e308 et la plus grande valeur n gative et la plus petite valeur positive sont respectivement 2 2e 308 et 2 2e 308 Certaines fonctions de communication acceptent uniquement des r els simple pr cision Les valeurs des r els simple pr cision sont comprises entre 3 4e38 et 3 4e38 et la plus grande valeur n gative et la plus petite valeur positive sont respectivement 1 2e 38 et 1 2e 38 Ces r els correspondent au type float de C IEEE 32 bits 3 2 Les caract res dans la syntaxe Prolog H Tout au long du premier chapitre du manuel de r f rence la syntaxe tait plus sp cialement d crite pour le jeu ISO ce chapitre d crit une partie de la syntaxe relative aux caract res adapt e au syst me Windows Elle est valide pour chaque session Prolog qui utilise le jeu de caract res de la machine h te Il faut noter q
104. est r alis e uniquement au cours des op rations de lecture et d criture Un contexte de lecture criture permet de dire sauf contre ordre toutes les repr sentations d identificateurs abr g es lues doivent prendre le pr fixe par d faut pref except es les repr sentations abr g es suivantes id id2 id3 qui prennent respectivement les pr fixes pref1 pref2 pref3 Et pour tout ce qui doit tre crit c est dire lorsque l on doit construire la repr sentation la plus concise possible faire en sorte qu apr s relecture on obtienne l identificateur Prolog qu on voulait crire Un contexte d signe donc quel pr fixe doit tre attribu la repr sentation simplifi e d un identificateur pour obtenir sa repr sentation compl te D o la d finition du contexte par une liste d attributions explicites de pr fixes un pr fixe par d faut pour les autres cas Ce contexte est compl tement d fini on dira que c est un contexte sain ProloglA J Prolog WTA NATE LITE J Prolog LIE PIT AZT AEN AGE Structuration et modification des r gles R3 19 Propri t s e La liste des attributions explicites est trait e de gauche droite e Si une repr sentation abr g e appara t plusieurs fois dans la liste on lui attribuera le premier pr fixe associ c est dire le plus gauche e Toutes les cha nes d clar es dans le contexte n ont pas besoin de correspondre des identificateu
105. est calcul e et m moris e une fois pour toute Le contexte est nouveau compl tement d fini et invariant dans le temps 3 6 3 Modules Prolog tant incr mental sans type de donn es il n y a aucune contrainte sur l ordre d insertion des r gles Vous pouvez toutefois grouper toutes les r gles d un m me module et les d finir en m me temps Vous pouvez galement d finir des conventions de lecture de ce groupe de r gles diff rentes de celles du contexte d ex cution Ceci permet de rendre la d finition du module autonome si le contexte est sain La d finition d un module peut donc se faire par l nonc de un contexte de lecture criture du module un ensemble de paquets de r gles ProloglA Prolog R 3 20 Manuel de R f rence HERITAGE ventuellement une r gle d initialisation du module ex cuter juste apr s compilation ou chargement des r gles La d finition d un module peut se faire en mode insertion en utilisant la d claration module o omodule 3 5 2 insert insert module p e i d quivaut gt set context p e i d gt mode verif prefixe p regles regles end module p gt exec p ini module gt restaure context i i Attention si vous utilisez dans le contexte d un module des conventions implicites m me pour un contexte sain il faut que la famille soit d ja d finie pour que les attributions implicites se fassent Dans la m me optique si vous f
106. et manipulation des objets editfield ou label get key c get key at 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 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 stty USEGETKEY t r glemente l 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 Dans ce mode l utilisateur peut diter des fen tres texte pendant que Prolog I travaille t lt 0 1 On peut lire sa position avec gr_click 0 x y PrologIA J Prolog LIE PIT AZT AEN AGE Primitives graphiques U 5 37 get _key prendra un caract re qui ne peut tre plus g que 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 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
107. expr expro prefix_opy 4 postfix_OPng iNfiX_OPn gd prefix_Opy gq xpry expr postfix_OPn g expry INfiX_OPn g d gt EXPTd EXPTn 1 gt pterm identifier graphic symbol identifier graphic symbol identifier graphic symbol Voir la description compl te au paragraphe 1 9 ProloglA Prolog R1 16 Manuel de R f rence HERITAGE i Bee Les r gles et les assertions D un point de vue th orique un programme Prolog sert d finir un sous ensemble A dans l ensemble R de nos arbres Les l ments de A sont appel s assertions et l on peut g n ralement associer une phrase d clarative a chacun d eux La figure 1 9 montre quelques exemples de telles associations L ensemble A des assertions est g n ralement infini et constitue en quelque sorte une immense banque de donn es Nous verrons plus loin que l ex cution d un programme peut tre vue comme une consultation d une fraction de cette banque Bien entendu cette banque ne peut tre enregistr e sous une forme explicite Elle doit tre repr sent e partir d une information finie mais suffisante pour pouvoir d duire la totalit de l information contenue dans la banque Dans ce but la d finition de l ensemble A des assertions est faite au moyen d un ensemble fini de r gles chacune tant de la forme t0 gt t1 tn o n peut tre nul et o les fi sont des termes est_fils_de pour Jacques est le fils de Marie
108. fonctionnent comme la pr c dente Le format de cette fonction type OutStringFunction d fini dans le fichier des prototypes est impos son unique argument est l adresse d un buffer contenant le texte imprimer Le code de retour de la fonction est ignor aucune erreur n est attendue Int rieurement la fonction peut effectuer toute op ration m me bloquante en traitant les v nements n cessaire pour afficher le texte Toutefois on remarquera que Prolog peut mettre des lignes vides et donc un filtrage peut tre n cessaire si par exemple des bo tes de messages sont utilis es ProloglA A U3 8 Manuel d Utilisation Windows Ba eine Pal InterruptProlog Cette routine sans argument permet de d clencher une interruption utilisateur dans la session Prolog en cours d ex cution Elle peut tre invoqu e tout moment L exemple fourni avec la DLL en montre l utilisation pour stopper l ex cution du pr dicat Prolog enum ProloglA 7 Prolog LIE RYT AIEEE CI LAGE 4 Communication avec une application en utilisant le protocole DDE 4 1 Aper u du protocole DDE 4 2 Utilisation simple de Prolog II comme serveur DDE 4 3 Programmer en Prolog II un applicatif Client ou Serveur L environnement de Prolog II supporte le protocole DDE d une mani re portable entre Windows 32 et OS 2 PM Ces nouvelles fonctionnalit s offrent deux types de possibilit s Lancer des buts Prolog et en r cup rer les r
109. g n r es par le clavier ou la souris trait s diff rents niveaux syst me d exploitation syst me graphique et donc propag s jusqu diff rents niveaux utilisateur final Nous nous int ressons ceux qui arrivent jusqu Prolog Un certain nombre d objets graphiques Prolog sont sensibles aux v nements et les transmettent au programmeur Prolog qui peut d cider trois traitements diff rents les traiter imm diatement en attachant un programme Prolog sur l objet les envoyer automatiquement dans la queue d v nements de Prolog pour les traiter ult rieurement les ignorer 5 1 2 Objets graphiques Tout d abord parlons des objets principaux que sont les fen tres Toutes les fen tres peuvent ou non avoir un cadre une barre de titre des menus Elles peuvent tres redimensionn es iconifi es invisibles Les fen tres de texte peuvent avoir des barres de d filement horizontal ou vertical et peuvent sauvegarder leur contenu Il existe quatre types de fen tre avec des caract ristiques et des fonctions diff rentes ProloglA Prolog HERITAGE Primitives graphiques U5 3 Les fen tres EDIT ce sont des fen tres de texte destin es l dition de texte Tout le contenu de la fen tre est modifiable directement au moyen du clavier de la souris des menus par programme via les primitives d entr es sorties de Prolog le point d criture se trouve a la fin du texte le point de lecture est i
110. gt l La liste d items Elle doit tre une liste de constantes ventuellement mixtes cha ne entier r el identificateur lt gt li Est la s lection initiale sous la forme d une liste ventuellement vide d entiers qui sont les rangs partir de 1 dans des l ments que l on veut s lectionner ProloglA U5 38 Manuel d Utilisation Windows C est le rang de l l ment qui doit appara tre en premi re position en haut du rectangle Donne en sortie la liste des rangs des items s lectionn s m me convention que pour Donne en sortie le rang du premier item visible dans le rectangle D crit l op ration r aliser parmi 4 possibles lt 0 gt Dessine seulement pas de saisie possible lt 1kK gt Dessine et prend la main jusqu ce qu un v nement de type frappe de caract re ou clic dans la fen tre l ext rieur de la liste ne se produise NI LE CLIC NI LE CARACTERE NE SONT L US Rend pour k 0 Retour Chariot tap 1 clic en dehors de la liste 2 TAB tap lt 2 x y m gt Dessine la liste et traite le clic x y m donn par exemple par gr click 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 x y m et prend la main jusqu ce qu un v nement de type clavier ou un clic dans la fen tre l ext rieur du rectangle se produise Ni le clic ni le caract re ne sont lus Rend pour k 0 Reto
111. l adresse d une zone de r els 64 bits IEEE SYMBOL_ARRAY l adresse d une sous table d associations chaine d un identificateur repr sentation interne La partie cha ne est initialis e par le programmeur la partie repr sentation interne est initialis e par Prolog Pour ce type de descripteur le champ name d finit le pr fixe par d faut pour les symboles de la table c est dire que si la cha ne id name correspond un nom abr g c est ce pr fixe par d faut qui est utilis Ce type d objet permet de construire automatiquement une table des valeurs internes des identificateurs Prolog que l on d sire manipuler Tous les identificateurs de la tables sont permanents cf set permanent symbol par d faut 7 5 1 Exemple de zone commune de donn es On d clare ici deux tableaux partag s par C et Prolog Le premier est un tableau de 100 entiers nomm com en C et com en Prolog Le deuxi me est un tableau de 3 cha nes de 10 caract res au plus nomm m str en Prolog et str en C include proext h int com 100 char str 3 0123456789 m EXTERNAL DESCRIPTOR descTablel com INT ARRAY OFFSET ZERO BASED 100 POINTER com m str STRING ARRAY 3 POINTER str 0 0 0 0 Supposons que ces d clarations soient contenues dans le module source C table c il peut tre li Prolog apr s l avoir compil en ex cutant prolink pour l dition de liens avec le module objet d
112. la suite d une requ te Advise notifie un changement dans la valeur de l Item auquel le Client s est abonn pour la conversation Conversation Cet Item est d sign par la cha ne de caract res t tem La nouvelle valeur est soit transmise dans xArgument lien chaud soit disponible pour une future requ te de type ddeRequestData lien ti de Dans ce dernier cas _xArgument vaut nil Le statut de terminaison de ce but n a aucun sens ni aucun effet sur le r sultat transmis au serveur Exemple Le sc nario suivant d crit en Prolog un dialogue avec un Serveur de type horloge gt load dde mo 3 gt insert amp Code minimum n cessaire pour suivre le dialogue ProloglA HERITAGE Communication avec une application en utilisant le protocole DDE U4 11 7 Prolog CRITAE TT ddeCbServerUpdate _hC Now 24 00 00 gt ddeTransmitRequest _hC ddeExecute Close I ddeCbServerUpdate _ Now _tTime gt outm tIt is outml _tTime ddeCbServerClosing _ gt outml t tEnd gt ddeDeclareAsClient nil Time _hC f _hc 1 gt ddeTransmitRequest 1 ddeRequestData Now _t _t 15 20 33 gt ddeTransmitRequest 1 ddePokeData Now 23 59 30 gt ddeTransmitRequest 1 ddeHotLinkData Now ddeOpen It is 23 59 55 It is 23 59 56 It is 23 59 57 It is 23 59 58 It is 23 59 59 End gt ddeEndConversation 1 Failure number 1 is out of date
113. le contexte on a une erreur remove_implicit s s2 Op ration inverse enl ve de l ensemble d identificateurs pris en compte pour le contexte de la famille ferm e s1 l identificateur de nom abr g s2 Lorsqu on applique cette commande la famille sys elle a le m me effet pour les identificateurs abr g s que celui de banaliser des noms r serv s Supposons que quelqu un d sire supprimer l identificateur sys dictionary de l ensemble des identificateurs pris en compte pour les op rations de contexte concernant la famille sys L exemple suivant montre le r sultat obtenu ProloglA 7 Prolog TAGE J Prolog RYT ASEIE Structuration et modification des r gles R3 13 gt string ident p a dictionary outl sys dictionary dictionary dictionary dictionary p sys a dictionary gt remove_implicit sys dictionary gt string ident p a dictionary outl sys dictionary dictionary sys dictionary dictionary p a dictionary dictionary 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 fixe par d faut du contexte de lecture criture dictionary s Unifie s avec la liste des pr fixes des modules utilisateur pr sents en m moire dictionary s to Unifie 0 avec la liste des formes identificateur_d acc s arit des r gles du module s7 Exemple gt insert aa bb 1 gt aa cc 1 2 gt gt dictionary a
114. 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 ProloglA U5 42 Manuel d Utilisation Windows gt load obdialog mo gt gr dialog Hello buttonD OK nil L Hello gt gr dialog Name editf 10 fieldi buttonD OK field1 John nil L Les primitives de description d objet sont les suivantes ctext s text s f text s f c ou s D crit une ligne de texte non ditable repr sent par s o s est une cha ne f d signe le num ro de fonte la mani re du pr dicat gr font et c la couleur du texte la mani re de l attribut foreground du pr dicat set_attribute text i D crit une ligne de texte non ditable dont le nom de zone esti o i est un identificateur Si une valeur est associ e ai dans 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 cb i cb i v cb i v s D crit une bo te dont le nom de zone est i de type choix oui non qui sont repr sent s respectivement par l
115. les Clients ventuellement d ja connect s Cependant ils le seront de mani re correcte si Prolog II se termine pr matur ment Apr s validation Prolog II publie un Service ou nom d application intitul Prolog2 et sous lequel il reconna t le Topic ExternalEvent Une Wild Connection sans Service mais sp cifiant ce Topic sera aussi accept e Un nombre quelconque de Clients peuvent se connecter chacun suivant sa m thode jusqu limitation par le syst me Il est remarquer que lors de la connexion et de toute op ration ult rieure la console de Prolog II ne manifeste aucune r action sauf pour une op ration d criture explicite Apr s connexion le Client peut utiliser librement les requ tes DDE standards avec la s mantique qui va tre d crite ci apr s ProloglA J Prolog LIE PIT AZT AEN AGE Communication avec une application en utilisant le protocole DDE U4 5 4 2 2 Transmission d une requ te Prolog II Il existe deux possibilit s Envoi d une requ te de type Poke sur un Item nomm texte sans donn e additionnelle ignor e si pr sente un v nement de type extern_event texte 0 0 est plac dans la queue d v nements de Prolog II et pourra tre lu par le pr dicat get_event 3 du module graphique Envoi d une requ te de type Execute le param tre Item n existe pas avec une donn e but_ prolog le but transmis est plac dans la queue d ex cution de Prolog II
116. memory_file s n Cr e une unit de type fichier m moire de nom s Son tampon de caract res a une longueur de 400 caract res pour la premi re forme du pr dicat En utilisant la deuxi me forme le tampon sera de longueur n ou de la valeur la plus proche sachant que la taille minimale allou e est de 400 caract res et la taille maximale allou e est de 32K caract res Cette unit peut tre utilis e en entr e et en sortie Elle peut tre en m me temps unit courante d entr e et unit courante de sortie Si le tampon est trop petit pour les op rations d critures qui y sont faites il est automatiquement doubl de taille sans d passer les 32K caract res L unit sera ferm e physiquement quand elle aura t ferm e la fois en lecture et en criture Cette unit peut tre utilis e au m me titre que les fichiers Les types et les modes d ouverture des unit s peuvent tre obtenus par le pr dicat current_file x current_file x t m Unifie successivement x avec les noms des unit s ouvertes en lecture et ou en criture t avec le type de cette unit et m avec le mode d ouverture Entr es Le tampon de caract res standard pour une unit d entr e fourni par Prolog est limit 400 caract res S il arrive qu une ligne soit plus longue Prolog se comporte comme s il y avait un espace apr s le 400 i me caract re Le reste de la ligne est lu apr s puisement des 400 caract res pr c dents Il est
117. nil la d finition se rapporte toutes les fen tres ProloglA U5 18 Manuel d Utilisation Windows customColor d finit la couleur utilisateur pour l objet o v est de la forme lt r v b gt out_r _v _b sont des entiers ou des r els et repr sentent la couleur en composantes rouge vert bleu comme d fini dans la primitive gr_color3 Voir 5 5 Mode de dessin et d criture Cet attribut n est pas valable pour la primitive get_ attribute focus donne le focus l objet o v est ignor N est pas un attribut valide pour la primitive get_ attribute font concerne la fonte utilis e par l objet v a la m me signification que dans la primitive gr font Voir 5 5 Mode de dessin et d criture La fonte d finit un style et une taille La taille pourra tre obtenue par la primitive get_attribute avec l attribut fontheight foreground concerne la couleur de tra age texte ou dessin de l objet v est un entier ou un identificateur et suit les m mes conventions que dans la primitive gr_color2 Voir 5 5 Mode de dessin et d criture predicate v est le pr dicat Prolog attach a l objet N est pas valable pour les labels puisqu ils ne sont pas sensibles ni pour les menus et leurs items voir pour a la primitive set menu Remarque il peut tre utilis pour les unit s graphiques il correspond alors au pr dicat qui doit tre lanc si l unit n a pas de bitmap sur un v nement expose n cessit de
118. normal La combinaison par d faut est gr_text 4 12 nil Par exemple gr_text 3 18 1 3 4 nil 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 appropri es gt assign Geneva 3 assign Italic 1 assign Relief 3 gt gr_text Geneva 18 Italic Relief nil output graphic outm Hello output console affiche Hello dans l unit graphique s gr_font f Charge la fonte repr sent e par f pour l unit graphique courante La fonte de base qui est la fonte propos e par le syst me est d sign e par ffdefault les autres fontes propos es sont de la forme ff i ou bien i o 7 est un entier compris entre 1 et 50 La correspondance entre l entier et le nom de la fonte du syst me h te est d finie dans le fichier fonts usr La totalit des fontes disponibles sur la machine peut tre examin e apr s un premier lancement de Prolog dans le fichier fonts all cr au d marrage du graphisme Exemple gt gr font ft 2 ProloglA Prolog HERITAGE Primitives graphiques U5 29 5 6 Dessin et positionnement Les primitives d crites ci dessous agissent sur l unit graphique courante qui peut tre une fen tre de type GRAPHICS ou une drawing area Elles permettent d y d finir un syst me de coordonn es et d y r aliser des dessins gr_setorigin x y Change l origine des axes
119. on dit que q est gel L effacement effectif de q sera d clench au moment o x deviendra li e 2 Six est li e alors freeze lance l effacement de q normalement C est au programmeur de s assurer qu une variable gel e sera toujours d gel e dans le futur pour que le but associ ne reste pas ind finiment en attente Ceci n est pas v rifi par Prolog et peut conduire des solutions trop g n rales Remarque Les impressions des variables d une question sur lesquelles il reste des buts gel s se fait d une mani re sp ciale gt freeze x foo x foo nil Voyons maintenant quelques exemples d utilisation de freeze Exemple 1 Evaluation de somme x y z On veut r soudre l quation z x y seulement si les deux variables x et y sont connues somme x y Zz gt freeze x freeze y sommel x y Z sommel x y Zz gt val x y z Exemple 2 Mais on peut faire mieux On veut r soudre la m me quation si deux au moins des variables x y z sont connues somme x y Zz gt freeze x freeze y ou bien u sommel x y 2Z freeze y freeze z ou bien u somme2 x y 2Z freeze x freeze z ou bien u somme3 x y 2Z ou bien u p gt free u eq u Cst p ou bien u p gt sommel x y Zz gt val x y z somme2 x y Z gt val z y x somme3 x y Zz gt val z x y Ci dessus la variable u qui devient li e d s que l une des additions est effectu e
120. option choisie sur la ligne de commande ou par ex cution du pr dicat set prolog flag 2 Soit comme une vraie cha ne de caract res type part enti re Soit comme un atome il y aura alors une quivalence avec l criture entre simples quotes Soit comme une liste compos e des caract res atomes pr fix s par le pr fixe vide constituant la cha ne Soit comme une liste compos e des codes des caract res constituant la cha ne Exemples set prolog flag double quotes string read R hello world R hello world set prolog flag double quotes chars read R ProloglA J Prolog LIE PIT AZT AEN AGE Extensions Edinburgh R10 15 hello world R h e 1 1 0 w o r 1 d set_prolog flag double_quotes codes read R hello world R 104 101 108 108 111 32 119 111 114 108 100 set prolog flag double quotes atom read R hello world R hello world 10 5 2 2 Pr dicats Si l argument d signant l unit d entr e est un argument en entr e on pourra utiliser indiff remment le n de canal ou bien l alias associ cette l unit Dans le cas contraire cas du pr dicat current_input 1 c est le n de canal qui sera rendu La plupart des pr dicats d entr e peuvent s utiliser soit sur l unit sp cifi e en argument n de canal alias soit sur l unit courante d entr e auquel cas l argument indiquant l unit est absent Le comportement des pr dica
121. ou jusqu la fin de la ligne sur l unit console sont ignor s puis l insertion reprend A la fin de l insertion insert g n re alors l erreur 86 et le compl ment d erreur indique le nombre d erreurs trouv es pendant l insertion Les r gles sont automatiquement index es sur le premier argument au fur et mesure de leur entr e Selon le mode de warning choisi au lancement de Prolog la lecture des r gles un warning est affich quand une variable singleton appara t Une variable singleton est une variable qui n appara t qu une seule fois dans la r gle elle est donc priori inutile Pour la variable muette _ le warning n est pas affich insert sert d finir des paquets de r gles reinsert sert red finir des paquets de r gles et insertz sert compl ter des paquets de r gles en ajoutant des alternatives en fin ProloglA R 3 28 Manuel de R f rence Par cons quent insert provoque une erreur lorsqu un paquet lu existe d j et qu il n a pas t d clar non continu directives discontiguous 1 ou multifile 1 alors que insertz ajoute le paquet lu en fin de paquet existant et alors que reinsert remplace l ancien paquet par la nouvelle d finition Attention ceci peut tre dangereux une erreur sur le nombre d arguments 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 Dans le m me esprit l utilisation d
122. plus grand ou egal y z plus_grand_ou_egal x x gt plus grand ou egal x y 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 bien entendu la bonne solution s obtient en permutant l ordre des deux r gles liste_de_un 1 x gt liste_de_un x liste_de_un nil gt gt liste de_un x DEBORDEMENT1 Ej La coupure Normalement Prolog essaye d effacer une suite de buts de toutes les mani res possibles Mais si on utilise une r gle contenant un ou coupure pour effacer un but q l effacement de ce supprimera tous les choix de r gles restant faire pour effacer ce but q Cela restreint la taille de l espace de recherche on peut dire que fait oublier les autres mani res possibles d effacer q Le 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 fait oublier sont les autres r gles ayant la m me t te que celle o le figure 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 couleur rouge gt couleur bleu gt taille grand gt taille petit gt choixl x y gt couleur x
123. plusieurs suppress i a n par exemple L appel aux pr dicats edit et editm sur des faits non compil s les transforme en r gles compil es quivalent suppress insert initialization B Initialiser un groupe de r gles Inclut le but B dans la liste des buts qui seront ex cut s d s la fin de la compilation du fichier dans lequel se trouve cette directive Ceci est une directive de compilation et non pas un pr dicat c est dire qu elle peut figurer au milieu d un source que l on compile mais ne peut se trouver dans une queue de r gle Cette liste de buts sera ex cut e la condition qu aucune erreur n ait t d tect e durant la compilation insert insertz reinsert Compiler des r gles Ces r gles pr d finies font basculer le systeme dans un mode dans lequel les nonc s r gles lus sur l unit d entr e courante sont ajout s dans l ordre dans lequel ils sont lus Les directives et les d clarations sont respectivement ex cut es et prises en compte imm diatement lorsqu elles sont rencontr es Le mode insert se termine soit quand un nonc vide est trouv rencontre de en syntaxe Prolog II soit si l on rencontre la fin du fichier d entr e Exemple gt insert conc nil y y gt conc e x y e z gt conc x y Z 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
124. pour un applicatif Client ou Serveur de terminer son activit DDE Elle ne devrait tre utilis e qu ensuite Selon les performances du syst me et des applicatifs des probl mes de time out peuvent survenir produisant une erreur Prolog Le d lai g n ral de time out bien que confortable 3 secondes peut tre ajust par l option M tttt de la ligne de commande o ftt est la dur e en millisecondes Cette valeur sera d terminer par essais Elle est talonn e par les valeurs 200 et 15000 ms Les paragraphes qui suivent tudient s par ment les deux modes mais rien n interdit un applicatif d tre simultan ment Client et Serveur pour des conversations diff rentes Il convient alors en l crivant d accorder le plus grand soin la gestion des num ros de conversations et ventuellement aux identificateurs DDE utilis s Pour cela la primitive suivante sera un auxilliaire pr cieux ddeRememberDatabase _xData Enum re les Services et les conversations en cours et les unifie avec l argument _xData Son format est le suivant dde I serve _tService pour les Services seulement pour le Serveur donc dde I am_Client _hConversation tTopic ou dde I am Server _hConversation _tTopic selon le cas pour les conversations ProloglA 7 Prolog LIE PIT AZT AEN AGE Communication avec une application en utilisant le protocole DDE U4 9 4 3 1 Programmer un applicatif Client DDE Les transactions DDE sont
125. pr d finie val equations t t l Cette r gle pr d finie sert transformer un arbre fini ou infini en une liste d quations qui a comme solution f indique la variable de repr sentant la racine de l arbre C est cette primitive qui est utilis e pour imprimer les solutions lorsque l option infinite est active Regardons une utilisation sur l exemple suivant gt infinite eq x ff ff x equations x t 1l out t outm outl l v131 eq v131 f v131 nil x v131 v131 f v131 l eq t ff t nil gt eq x ff ff x x v120 v120 ff v120 Mais une des utilisations principales de cette primitive est le fait de pouvoir ajouter des arbres infinis Nous utilisons la primitive assert chapitre suivant qui permet d ajouter une r gle ajout_infini t gt equations t t 1 assert arbre t 1 gt infinite eq x ff ff x ajout_infini x x v131 v131 f f v131 gt list arbre 1 arbre x11 gt eq x11 ff x11 gt arbre x x v131 v131 ff v131 2 4 Quelques conseils pour la programmation r cursive Le syst me Prolog II comporte un r cup rateur de m moire garbage collector automatique Ce ramasse miettes est tr s performant et est capable de ne garder dans les piles que les donn es dont vous avez effectivement besoin ceci permet d utiliser fond les d finitions r cursives de programmes Malgr tout certaines techniques de programmation peuvent
126. priv e de ce signe est alors ouvert en mode append c est dire que si ce fichier existe d j sur disque les sorties qui suivront vont y tre ajout es en fin output _is u Fournit dans u le nom de l unit de sortie courante 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 close output u u est le nom d une unit qui doit figurer dans la liste des unit s de sortie ouvertes S il s agit d un fichier il est ferm Le descripteur de l unit est enlev de cette liste et d truit En aucun cas cette primitive ne ferme une fen tre il faut utiliser pour cela les primitives sp cifiques line _width n Fournit dans n la longueur maximum actuelle des lignes de l unit courante d finie par set line width set line width n Permet de d finir la longueur maximale des lignes de l unit courante de sortie n devient la nouvelle longueur de ligne de l unit Par d faut la longueur maximale de la ligne est de 80 caract res Dans tous les cas elle est limit e 400 caract res Si aucun passage la ligne suivante n a t demand avant que la longueur maximum de la ligne ait t atteinte Prolog le force en ins rant un lt retour chariot gt entre deux unit s ou bien la s quence lt gt lt retour chariot gt l int rieur d une unit echo Active l option qui provoque l affichage sur l unit cons
127. r automatiquement Si le texte est vide cela permet d obtenir un rectangle ProloglA 7 Prolog TA NAT LITE Prolog HERITAGE Primitives graphiques U5 5 Listbox liste d items inscrits dans un rectangle avec barre de d filement verticale Chaque item peut prendre deux valeurs s lectionn ou non A chaque sollicitation d un item de la listbox un v nement est g n r Popup menu Pulldown menu Un menu regroupe une suite d items dispos s verticalement Un item peut tre soit terminal soit lui m me un menu on parlera dans ce cas de menu hi rarchique La s lection d un item terminal du menu g n re un v nement et fait disparaitre le menu On distingue deux formes de menus qui se diff rencient par la fa on de les activer et par les caract ristiques des fen tres auxquelles ils peuvent tre attach s Il est possible d attacher un popup menu particulier n importe quelle unit fen tre L activation du popup menu galement appel menu flottant d une fen tre se fait alors que le curseur de la souris est dans la fen tre soit en appuyant sur le bouton menu de la souris si la souris comporte plusieurs boutons soit en appuyant simultan ment une touche d option et le bouton de la souris si la souris poss de un seul bouton Le menu appara t sous le curseur de la souris Il est possible d attacher un ou plusieurs pulldown menu galement appel menu d roulant n importe quelle unit
128. r gle exec est remplac e par outm bonjour qui est effac sans probleme En revanche gt exec x gt CE TERME NE PEUT ETRE UN BUT gt provoque une erreur car la variable p reste libre au moment o on tente de l effacer ARGUMENT DE MAUVAIS TYPE Cette erreur survient lorsque l on essaie d effacer une r gle pr d finie avec un des arguments qui n est pas du type attendu G n ralement l argument qui est en cause est affich avec le message APPEL A UNE REGLE NON DEFINIE On essaye d effacer une r gle qui n est pas d finie alors qu on est en mode erreur flag uE Notez que pour faire chouer volontairement l ex cution il faut appeler la r gle pr d finie fail Il existe plusieurs comportement possibles pilot s par un flag dans la commande de lancement de Prolog pour l effacement d un pr dicat non d fini uW affiche un warning et continue l ex cution du programme uF choue uE g n re l erreur Les autres erreurs d ex cution concernent principalement l utilisation des primitives block block _exit et de val En g n ral les diagnostics sont suffisamment explicites Il est conseill de lancer Prolog avec l option f uE qui permet d avoir un diagnostic pr cis lors de l appel erron d une r gle n existant pas cause d une faute de frappe par exemple Lorsque l on veut appeler une r gle et avoir un chec lorsque celle ci n existe pas tester d abord sa pr sence avec current_predicate Pr
129. reload la regle d initialisation n est ex cut e que si elle fait partie des r gles modifi es ProloglA R3 16 Manuel de R f rence HER 7 Prolog TAGE module p s i lt gt module p s i p La directive sys omodule context en lieu et place d une directive module utilise comme contexte de lecture du module le contexte d fini par la cha ne de caract res context Ce contexte a t d fini au pr alable par un appel la primitive set_context ou bien par une pr c dente directive module Si ce contexte n existe pas la directive omodule context est quivalente la directive module context o les r gles de d fauts s appliquent Le contexte de lecture d fini par l en t te du module est utilis pour la lecture de tout le reste du module y compris la d claration sys end module Le contexte existant avant la lecture est ensuite r tabli Si au moment de la lecture du module une r gle ou un fait est cr avec un identificateur d acc s dont le pr fixe est diff rent de celui du module une erreur est g n r e Les deux modules de l exemple list en t te du chapitre peuvent ainsi s crire de diff rentes mani res ler exemple module grammar sentence x z gt sn x y g vp y z 9 sn x 1 1 g gt lexicon pn x g end_module grammar 2eme exemple module grammar lexicon pn verbe sentence x z gt sn x y g vp y z 9 sn x 1 1 g gt pn x g end_
130. retracer une partie de l unit La valeur attribu e par d faut est gr update Remarque ne pas confondre avec le pr dicat qui est lanc sur un v nement clic il est lui li une portion de l unit Voir le pr dicat gr_sensitive Il n est pas modifiable par set_attribute protected permet de d sactiver l option de fermeture dans le menu par d faut d une fen tre rank concerne la num rotation des objets dans leur parent v est le rang local de l objet dans son parent ce num ro est unique pour un parent donn Implicitement c est le num ro d ordre de cr ation Cet attribut n est pas valable pour les fen tres state concerne l tat de l objet s lectionn ou non s lectionn v vaut respectivement 1 ou 0 Est valable uniquement pour les check buttons et les radio buttons text concerne le texte d un champ d dition le titre d une fen tre le libell d un objet de type bouton ou d un label Dans le cas g n ral v est une cha ne de caract res Pour un champ d dition v peut tre de la forme lt s 1 gt ce qui signifie que la cha ne de caract res s doit tre ajout e mode append au contenu du champ d dition text_ selection concerne la s lection dans un champ d dition v est de la forme lt p1 p2 gt o p1 est l indice du premier caract re s lectionn d bute 0 p2 est l indice suivant le dernier caract re s lectionn p2 gt pl top_ left concerne la position du coin su
131. s see f seeing f Poole LE R77 Char _code C put C put byte 12 put byte alias1 12 put char e put char alias1 e put code 12 put code alias1 12 quit 1 val rad 90 0e0 X read x read alias1 X read rule T Q read term X variables L read term alias1 X variables L read unit type valeur real 5 9e0 realloc code 50 reconsult prog1 p2E recv_double 5 D recv_integer 5 N recv_real 5 R recy string 5 S redef_array foo 1000 reinsert prog p2 reload myfile reload myfile lt gt aa bb remove implicit sys outml remove sentence terminator retract father john X Y retract brother X Y true retractall father john X rule father john x Y rule r father john X Y rule 5 father T Q rule nb foo 2 X save aa bb myfile save_state myfile see filei seeing filei ProloglA Poole HER A Liste des directives et pr dicats pr d finies B 9 seen send double n d send double 5 12d0 send_integer n n2 send integer 5 1000 send real n r send real 5 3 14e0 send string n s send string 5 error set_context s set context user set_context s1 11 12 s2 set context user sys set_cursor n n2 set_cursor 1 24 set_draw_mode s set _ draw mode TTY set_import_dir s set import dir home user set_input h se
132. s dans l ordre sp cifi par le pr dicat C_ompar Dans cette liste les l ments multiples ne sont conserv s qu une seule fois Le pr dicat sort 2 d crit pr c demment n est qu un cas particulier de celui ci en donnant a l argument C_ompar la valeur term_cmp Exemple gt insert compar _tuple P1 X P2 Y R gt term_cmp X Y R sort aa 4 bb 7 cc foo dd 3 aa 4 ff 1 nil L compar tuple L ff 1 dd 3 aa 4 bb 7 cc foo nil keysort Ll L2 C ompar L2 est unifi e avec la liste des l ments de Z tri s dans l ordre sp cifi par le pr dicat C_ompar Dans cette liste les l ments multiples sont conserv s Le pr dicat keysort 2 d crit pr c demment n est qu un cas particulier de celui ci en donnant l argument C_ompar la valeur term cmp Exemple gt insert compar tuple Pl X P2 Y R gt term cmp X Y R keysort aa 4 bb 7 cc foo dd 3 aa 4 ff 1 nil L compar tuple L ff 1 dd 3 aa 4 aa 4 bb 7 cc foo nil ProloglA 7 Prolog she re TAG J Prolog LIE RYT AIEEE CIS LATE 5 0 5 1 922 5 3 5 4 5 Les entr es sorties G n ralit s Entr es Sorties Chargement et adaptation du module de dessin D claration d op rateurs Tous les organes d entr e sortie clavier cran fichiers fen tres etc utilis s par un programme Prolog II y sont repr sent s par des entit s appel es unit s d entr e sortie La repr sentation cri
133. se produisent provoquent la suspension du programme Prolog en cours pour lancer le pr dicat associ l objet avec en premier argument l identification de l objet et ventuellement en deuxi me argument une information suppl mentaire caract re tap Lorsque le pr dicat se termine la d monstration suspendue reprend son cours normalement Cela permet de g rer en direct la saisie dans les crans graphiques Il est galement possible de diff rer le traitement des donn es saisies ou des v nements Pour cela il suffit de sp cifier sys get_ event la place du pr dicat ce qui aura pour effet de mettre simplement cet v nement dans la queue d v nements de Prolog elle peut tre scrut e par get event ou vid e par clear events Ou encore il est possible de ne rien faire Pour cela il suffit de sp cifier ni la place du pr dicat ce qui aura pour effet d ignorer les v nements de l objet ProloglA U5 14 S S S S S S S Manuel d Utilisation Windows kill_object o D truit l objet o Est valable pour tout type d objet new_check button o p v s b lt x1 y1 x2 y2 gt Cr e un check button identifi par o dont le texte est s Le bouton et le texte seront inscrits dans un rectangle de coordonn es x y1 x2 y2 dans la fen tre parente p Il sera visible selon la valeur de v x2 et y2 doivent tre libres ils seront alors unifi s avec les coordonn es effectives du coin inf rieu
134. sont send string et receive string Pour les transferts de donn es entre Prolog et les langages externes ou vice versa les conventions sont les suivantes get string put string get term put term passent et re oivent des cha nes ISO get_O string put O string ont les m mes arguments et le m me fonctionnement que respectivement get string et put string mais passent et re oivent des cha nes h tes sous forme imprimable Et enfin voici quatre proc dures de traduction de cha nes bin_str_iso_to_host source dest bin_str_host_to_iso source dest r alisent la conversion d une cha ne ISO en une cha ne h te et vice versa en assimilant les cha nes des donn es binary string c est dire la longueur est conserv e il peut y avoir des caract res non imprimables et les caract res de la cha ne d entr e qui n existent pas dans le jeu de sortie sont remplac s par le print_str_iso_to_host source dest print_str_host_to_iso source dest r alisent la conversion d une cha ne ISO en une cha ne h te et vice versa o la cha ne h te est la repr sentation printable string de la cha ne ISO la longueur des deux cha nes n est pas forc ment la m me un caract re peut tre repr sent par une cha ne quatre caract res lsource est l adresse d une zone m moire o se trouve la cha ne de r f rence termin e par le caract re nul dest est l adresse de la zone m moire o Prolog va copier l
135. sultats depuis un applicatif Client externe et ce sans crire aucun code d interface En chargeant un module Prolog sp cifique disposer d un jeu complet de primitives permettant l criture en Prolog sans aucune extension C de tout applicatif Client ou Serveur DDE 4 1 Aper u du protocole DDE Ceci n est qu une pr sentation tr s rapide du protocole DDE L utilisateur est invit se reporter la documentation du syst me h te choisi pour approfondissement Le DDE est un protocole de communication unidirectionnelle entre deux applicatifs nomm s Client et Serveur l initiative du Client de mani re interne la plateforme ProloglA U4 2 Manuel d Utilisation Windows 4 1 1 Les trois niveaux d identification du protocole DDE Le protocole DDE est fond sur une identification trois niveaux d changes couramment nomm s Service Topic et Item Chaque identifiant est une cha ne de texte en g n ral sensible aux minuscules majuscules limit e environ 255 caract res et priori unique dans le contexte fix par l identifiant du niveau pr c dent Le Service identifie un Serveur logique En pratique c est le plus souvent le nom g n rique de l applicatif Serveur lui m me EXCEL WORD CLOCK Mais rien n emp che un Serveur de d clarer plusieurs Services s il est capable de les g rer Le Topic indique un th me de conversation C est donc la base fondamentale de l ouvertur
136. taille des piles de Prolog kill_goal Revient l tat exact dans lequel se trouvait la machine avant le dernier appel de new goal new goal et kill goal fonctionnent comme des parenth ses encadrant l effacement d un nouveau but Prolog next_solution Fonction d activation de la machine la faisant transiter vers l tat d arr t suivant 1 4 ou 5 La fonction a pour valeur le nouvel tat de la machine Prolog SOLUTION EXISTS 0 NO GOAL 1 ERROR gt 0 ProloglA J U3 4 Manuel d Utilisation Windows i ae Pour tout tat Prolog diff rent de l tat non initialis le diagramme suivant d finit les transitions possibles EMPILEMENT D UN BUT PROLO G Etat 4 solution trouv e Etat 2 but pr t bm cut Etat 5 erreu Etat 1 rien ex cute Etat courant 1 4 3 4pde d monstration num ro M L gende Transitions r alis es par appel de new_goal Transitions r alis es par appel de kill_goal 4 t P Transitions pouvant r sulter de l appel de next_slution W Num ro de la d rmonstratio n courante 8 2 Initialisation et terminaison de Prolog Au d marrage d une application Prolog se trouve dans un tat non initialis La fonction ProStart permet d initialiser Prolog avec une configuration d finie dans la cha ne de caract res pass e en param tre cha ne repr sentant les options de lancement de Prolog taille des piles fichier d entr e La fonction retourne
137. ter ce graphe C est ainsi qu une r gle comme 21 sera interpr t e par s il y a un arc tiquet par 9 entre le noeud x et le noeud y du graphe rajouter entre x et y un arc tiquet nombre Une r gle comme 1 donnera s il y a un arc tiquet produit entre les noeuds x et y et un arc tiquet reste de somme entre les noeuds y et z rajouter un arc tiquet expression entre x etz Avec ces conventions analyser une phrase revient chercher un arc tiquet expression entre le premier et le dernier sommet du graphe associ Si on y parvient la phrase sera accept e sinon elle sera rejet e Ecrivons maintenant le programme en Prolog chaque symbole non terminal N de la grammaire nous associerons un pr dicat du m me nom M lt x y gt qui sera interpr t par 1l existe un arc tiquet N entre les noeuds x et y du graphe Pour la r gle 1 ceci donne la clause somme lt x y gt gt produit lt x z gt reste de somme lt z y gt Revenons un peu sur le graphe celui ci peut tre simplement repr sent par la liste des mots constituant la phrase d entr e e sommet a 2 sommet b e sommet c LX 3 sommet d sommet e 6 nil sommet f Chacun des sommets du graphe correspond un sous arbre de l arbre pr c dent Avec cette fa on de faire dans N lt x y gt x repr sente la cha ne d entr e avant d effacer N et y repr sente la cha ne restant analys
138. test regles test recuperation recuperation 1 2e0 gt des de cha nes 4444 2e0 gt idents de 0 2e0 gt Prolog caract res 1 2e0 gt i Ss RS ER int exemple2 int erreur long i char s 100 float f erreur new _pattern regles test 1i s f if erreur return error while next solution SOLUTION EXISTS erreur get formats 0 amp i s 100 amp f if erreur goto error printf d s f n i s kill goal return 0 error printf erreur n kill goal return erreur ProloglA U3 10 8 6 Manuel d Utilisation Windows Autres fonctions ConnectDescriptors EXTERNAL DESCRIPTOR paD Cette routine permet de d clarer dans le code de l application le tableau de descripteurs paD crit comme on l aurait fait pour une extension C directe Ce tableau de descripteurs doit tre persistant durant toute la session Prolog qui l utilise par exemple qualifi de static s il est en position de variable locale et la d claration doit tre faite avant le d but de la session avant l appel de ProStart Si l argument est NULL les descripteurs seront supprim s dans la prochaine session Si la routine est invoqu e plusieurs fois c est le dernier tableau qui est pris en compte La routine retourne 0 en cas de succ s 1 en cas d chec session d j lanc e ConnectInString InStringFunction pfIS Cette routine permet
139. toute la place disponible de la machine Dans ce cas il faut si c est possible augmenter la m moire totale de Prolog ou bien v rifier le fonctionnement du programme sans doute anormal 0 4 2 Interruption Un programme en cours d ex cution peut tre interrompu tout instant par un caract re d interruption lt Control C gt lt return gt souvent gt insert ProloglA RO 6 Manuel de R f rence FF gt BPS gt Fr lt Ctrl C gt INTERRUPTION UTILISATEUR gt 0 4 3 Erreurs d tect es en cours d insertion REGLE DEJA DEFINIE Cette erreur provient du fait que l utilisateur n a pas respect le principe suivant Toutes les r gles de m me nom et de m me arit doivent tre cons cutives deux r gles de m me nom arit ne peuvent tre s par es ni par un commentaire ni par une r gle de nom arit diff rent Les configurations suivantes sont donc ill gales qq x gt rr y gt qq z gt car la r gle rr est mal plac e ATTENTION cette erreur ne se produira pas si vous utilisez les primitives reinsert ou insertz En effet reinsert crase le paquet de r gles existant par sa nouvelle d finition et insertz compl te le paquet de r gles En particulier en utilisant reinsert dans le cas d crit ci dessus il n y aura aucune erreur et le paquet de r gles d acc s qq contiendra une seule r gle la derni re 0 4 4 Erreurs concernant les fichiers FIN DE FICHIER
140. trage menus sans que l utilisateur ait r organiser son programme sous la forme d une 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 comme la s lection d un menu ou le rafra chissement d une fen tre graphique Les v nements de type clic souris ou action clavier peuvent tre test s par programme ce qui permet de faire r agir le programme en cons quence L ensemble des primitives graphiques de Prolog II offrent galement la possibilit de cr er des fen tres supports d objets graphiques n tant pas eux m mes des fen tres Les primitives de cr ation et manipulation d objets agissent uniquement sur des objets Prolog Tous ces objets doivent tre cr s par les pr dicats Prolog et non par un outil externe de type g n rateur d cran par exemple Par contre les primitives de gestion des v nements peuvent aussi manipuler des v nements survenus sur des objets externes Prolog 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 Le signe dans la marge indique une primitive ou une caract ristique sp cifique au Macintosh Le signe s signale les nouvelles primitives dispo
141. u evalCst mult x y u gt val x y u lecture ProloglA Pal C 8 Annexe C HER read nil gt next_char in char read a b gt in_ident a read b read b gt next_char in char read b read b gt next_char in char read b read a b gt in_integer a read b read a b gt in char a read b criture ecrire lt o b x y gt gt op bin o o b outm ecrire x outm o ecrire y outm ecrire minus x gt outm ecrire x ecrire lt o_u x gt gt op_un o o_u out o ecrire x ecrire x gt string x outm x ecrire x gt out x op bin o o b gt op_add o o_b op bin o o b gt op mul o o b op bin o o b gt op exp o o b lancement run gt outm l expression read p analyse p e derivee e x e simplifier e f outm a pour derivee ecrire f line Di analyse p e gt expression e lt p nil gt analyse p e gt outm est incorrecte fail Voici par exemple le r sultat de l analyse d une expression prolog gt insert deriv p2 gt read p expression e lt p nil gt 3 x 246 x45 p 3 xnm nn WAM D MEN ge MXN MEN D MN nil e plus plus mult 3 exp x 2 mult 6 x 5 Nous avons ensuite d fini la relation de d rivation derivee f x f signifie f est la d riv e de f par rapport x Cette relation comporte une r
142. unifi avec le nom avec chemin valid par l utilisateur 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 ajout en t te du dialogue La r gle choue si le bouton Annuler est press 5 8 6 Choix d un noeud d un arbre gr_tree click a ln L utilisation de cette primitive n cessite le chargement pr alable du module de dessin dessin mo Dessine dans l unit graphique courante l arbre a et attend que l utilisateur clique sur un des noeuds de l arbre Lorsque ceci est fait est unifi avec le chemin conduisant au noeud et n est unifi avec le noeud Le chemin est la liste des num ros des fils parcourir en partant de la racine Par exemple le noeud dd de l arbre aa bb cc ee dd ff est repr sent par le chemin 2 1 1 nil ProloglA f J Prolog LIE RITA SEE UCI YAO J Prolog UERITMGE EI LAGE Primitives graphiques U5 41 5 9 R gles pour g rer des obj ets structur s gendialog D 11 12 gendialog P D 11 12 L utilisation de cette primitive n cessite le chargement pr alable du module obdialog mo Cette primitive donne l utilisateur un moyen tr s rapide de cr er des sources d crans graphiques pouvant tre ensuite int gr s des applications P D et 1 ont la m me signification que dans la primitive gr dialog d crite dans cette section G n re dans
143. v d h s gt transport v t sejour v h n duree d multiplier n d p additionner p t s transport Rome 1200 gt transport Londres 800 gt transport Tunis 2000 gt end_module agence gt dictionary agence 1 l agence module context 4 agence transport 2 agence voyage 4 nil gt not_defined agence 1 l agence additionner 3 agence duree 1 agence multiplier 3 agence sejour 3 nil predefined t Tester si un mod le correspond a une r gle pr d finie S efface avec succ s si est un terme correspondant l appel d une r gle pr d finie ProloglA R 3 30 Manuel de R f rence rule t q Rechercher 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 avec et la queue avec q Si une telle r gle n existe pas alors rule f q choue t doit tre soit un identificateur soit un n uplet dont le premier argument est un identificateur connu La r gle rule utilise l indexation des r gles lorsque c est possible voir no_index Exemple d utilisation de rule se rapportant toujours au programme conc donn plus haut gt rule conc x y Z q x nil z y q nil x v149 v150 z v149 v151 q cone v150 y v151 nil gt rule n t q Rechercher des r gles correspondant un mod le donn M me fonctionnement que rule f g mais en plus n est unifi avec le rang de la r gle
144. vous aider r cup rer encore plus d espace Pratiquement il s agit d utiliser adroitement la coupure des points de choix ainsi que de tirer un maximum de profit de l optimisation de r cursion et d appel terminal que fait le compilateur Prolog H L utilisation de ces techniques permet l criture de programmes qui se rappellent eux m mes ind finiment sans jamais d border ProloglA J it sf zelig Le contr le de l effacement des buts R2 13 Ceci sera plus clair partir d un exemple gt insert r p ter gt out 1 r p ter gt r p ter LLLTA Ba BU Fae Kit BFW Ft EW UD Levee est un programme tournant ind finiment sans d border car la r cursion se fait sur le dernier litt ral de la r gle Par contre le programme suivant d bordera car la r cursion accumule les litt raux effacer r cursion non terminale r p ter gt out 1 r p ter out 2 gt r p ter 11111111111111111111111 gt DEBORDEMENT PILE DE RECURSIVITE gt de m me le fait qu il reste des choix la r gle ex cut e accumule de l information garder L effacement du but avec la d finition qui suit provoquera un d bordement par accumulation de points de choix gt insert r p ter gt r p ter r p ter gt gt r p ter fail gt DEBORDEMENT PILE DE RECURSIVITE gt En revanche le programme suivant tournera ind finiment heureusement on peut l interrompre avec Control C r p ter
145. y de l quation ax bx c 0 si elles existent et qui provoque un backtracking sinon Etape par tape la marche a suivre est la suivante 0 Copier les fichiers proext h libentry obj usermpty c callpro h callpro def callproS lib userdll mak dans votre r pertoire courant Renommer usermpty c en roots c Adapter userdll mak en affectant la macro SourceName roots 1 Ajouter dans le fichier roots c le code suivant include lt math h gt puis real_ roots perr nb int perr nb float a b c d x1 if get_real 1 amp a perr nb get real 2 amp b perr nb get real 3 amp c perr nb return if a 0 perr nb 1 backtrack else if d b b 4 c lt 0 perr nb 1 backtrack else xl b sqrt d 2 a if put real 4 x1 perr nb return put _real 5 b a x1 perr_nb 2 Modifier la fonction user rule du fichier roots c en ajoutant l appel du nouveau programme externe Par exemple en donnant le num ro 20001 a la nouvelle regle user_rule nb err err_nb int nb err err_nb err err nb 0 switch nb case 20001 real_roots err_nb break 3 Effectuer les compilations et l dition de liens nmake f userdll mak 4 Renommer le fichier roots dll en prolo dll et le copier au m me endroit que l ex cutable prolog ProloglA J U3 6 Manuel d Utilisation Windows Peat Puly copy roo
146. 0 si tout c est bien pass un nombre non nul positif correspondant au num ro de l erreur si une erreur s est produite et l initialisation ne s est pas faite L appel de toute autre proc dure que ProStart dans l tat non initialis est ill gal Les types de la fonction et de son argument doivent tre comme ci d crit int ProStart params ProloglA J Prolog LIE PIT AZT AEN AGE Sp cificit s de Prolog II Windows U3 5 char params Lorsque l utilisation de Prolog est termin e la fonction ProFinal permet de lib rer les structures et terminer Prolog La fonction n a pas de valeur de retour elle a un argument qui sp cifie le status de terminaison de Prolog en fonction duquel ProFinal imprime un message Ce message doit tre d fini dans le fichier d erreurs de Prolog Le status doit valoir 0 pour une terminaison normale un nombre strictement positif pour un status d erreur Ce status d erreur pourra tre par exemple l erreur retourn e par une des fonctions suivantes new_goal next solution ou kill goal Apr s l ex cution de ProFinal Prolog se trouve nouveau dans un tat non initialis Les types de la fonction et de son argument doivent tre comme ci d crit ProFinal status int status Voici un exemple d utilisation mon_initialisation_prolog int err if err ProStart c 400 f cM prolog po 0 fprintf stderr initialisation reussie else fprintf stderr initialisatio
147. 1 0e0 X fail if fail fasserta town Marseille 13 fassertz town Marignane 13 file dictionary foo mo X find pattern abcdef de 4 findall X brother X Y L val float 5 5 0e0 flush_output alias1 free X freeze X list X freplace old X Y 1 010180 freplace old 2 10 2 011293 fretract town X 83 fretractall town X 83 ProloglA Poole HER A functor t i n functor t i n gc i gensymbol v get n get th n get_byte n get_byte h n get_char c get_char h c get _code n get code h n get _option c c get tlv v 1 get0 n getenv s1 s2 halt halt n hidden i n hidden s hidden_debug i n hidden_debug s hidden_rule i n hidden_rule s Ik ident t if b al a2 import_dir s in t 2c in t L c in_char c in_char c in double d in_ident i in_integer n in_real r in_sentence t1 t2 in_string s in_word s a include s index i n inf al a2 infe al a2 infinite infinite_ flag init_fassert i a l inl v Liste des directives et pr dicats pr d finies B 5 functor X aa 2 functor aa bb X bb cc aa X gc dictionary gensymbol X char _code C get C get alias1 C get byte aliasl C get _ char aliasl C char_code C get _ code C get_code alias1 C get_option r C ge
148. 1 2 Modification de l unit d entr e Le nom des unit s d entr e peut tre soit une cha ne Prolog soit un identificateur Prolog soit un entier Toutefois les fichiers et les fen tres pr d finies sont toujours d sign s par des cha nes input u input u n L unit dont le nom est u devient l unit d entr e courante Si cette unit ne figure pas parmi les unit s ouvertes alors son descripteur est cr et ajout dans la pile des unit s d entr e ouvertes Si l unit est nouvelle un fichier est recherch et ouvert Un fichier de commandes ouvert par input peut lui m me contenir une commande input la nouvelle unit courante est empil e au dessus de la pr c dente Dans la forme deux arguments n pr cise la taille en nombre de caract res du tampon de l unit Elle doit tre comprise entre 400 et 32K Si n n est pas dans cet intervalle la taille du tampon sera de la valeur la plus proche input_is u Unifie u avec le nom de l unit d entr e courante close_input L unit courante est ferm e sauf s il s agit de la console ou d une fen tre et son descripteur est enlev du sommet de la pile des unit s l unit pr c dente redevient unit courante close_input u L unit de nom u qui doit figurer dans la liste des unit s d entr e ouvertes est ferm e sauf s il s agit de la console ou d une fen tre et son descripteur est enlev de cette liste clear_input Saute les caract res qui res
149. 10 ProloglA U5 32 Manuel d Utilisation Windows gr_arc n r al a2 gr_arc n x1 y1 x2 y2 al a2 Dessine un arc d ellipse inscrit dans le rectangle r entre les angles a1 et a2 al et a2 sont donn s en degr s Les arguments sont les m mes que pour gr_arc mais l origine est sur l axe vertical a2 est relatif la position a le sens positif est dans le sens des aiguilles d une montre gt gr_arc frame 100 100 200 170 20 30 ai 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 gr_load s Dessine dans l unit graphique courante le contenu d un fichier graphique de nom s Ce fichier graphique est un fichier externe PrologII r alis l aide d un quelconque diteur graphique du syst me h te Il est possible de dessiner des endroits diff rents des parties s lectionn es du fichier en jouant sur les primitives gr setorigin et gr_rect clipRect ProloglA J Prolog LITE Prolog HERITAGE Primitives graphiques U5 33 5 7 Position de la souri
150. 155 ril 13 rol 222 sil str_input sol ee tii1 0 123 tiil l 456 tri1 0 14 tril li 15 tio1 0 11 tio1l 1 22 tiol 2 33 tsil 0 list str inl tsil 1 list str in2 tro1 0 44 trol 1 55 trol 2 66 strin 0 list_str_outl strin 1 list_str_out2 r_eserved 30 1i 3333 r 8 888000000000000e 03 s bonjour w 200 201 202 203 204 nil t1 2 000000000000e 02 2 010000000000e 02 2 020000000000e 02 2 030000000000e 02 2 040000000000e 02 nil1 T_S Zonel Zone2 nil m 1 234000000000e 03 gt callC average 1 3 5 nil 3 lt R x gt x 3 000000000000e 00 gt callC reverse lt abcde s 20 gt s edcba gt callC reverse lt abcdef s 20 gt s fedcba gt callC qsort qqq zzz aaa iii nil lt nil s 0 50 gt 0 because strings not created already exist s aaa jiii qqq Z2z nil ProloglA Prolog LIT R ITA E E sa la Bo f Ry N HERI 1 LL Da y Extensions avec des langages externes RETREBAGE ProloglA J Prolog LIE RYT AIEEE CI LAGE 8 Lancement d un but Prolog par un programme C 8 1 Principes de base 8 2 Initialisation de Prolog 8 3 Empilement d un but Prolog 8 4 Programmation 8 5 M thode simple d appel d un but Prolog 8 6 Autres fonctions Ce chapitre suppose une bonne connaissance du chapitre 7 les lecteurs non exp riment s peuvent sauter ce chapitre en premi re lecture La machine
151. 2 3 A propos des arbres infinis Ce paragraphe donne quelques informations pratiques sur l utilisation dans Prolog II des arbres infinis Tout d abord il faut remarquer qu un certain nombre de r gles pr d finies ne travaillent que sur des arbres finis En particulier in ne peut pas lire d arbres infinis et assert ne peut pas ajouter de r gles contenant des arbres infinis infinite no_ infinite Ces r gles servent d finir le type d impression de r sultat utilis il faut avoir activ l option infinite si l on d sire imprimer des solutions contenant des arbres infinis Voici un exemple qui utilise freeze et qui v rifie qu un arbre est toujours fini Ceci est un moyen indirect de faire le test dit d occur check Ce programme v rifie que l on n a pas deux fois le m me sous arbre dans chaque branche de l arbre arbre fini x gt branche finie x nil branche finie x 1 gt freeze x branche finie x 1 branche finie x 1 gt hors de x 1 domine x 1 branches finies l x 1 ProloglA J R2 12 Manuel de R f rence Asia 2 elig branches finies nil 1 gt branches finies x l 1 gt branche finie x 1 branches finies 1 1 domine x1 x2 x1 x2 nil gt domine x x gt tuple x split x x domine x nil gt infinite_flag Symbole dont la valeur 0 ou 1 indique si infinite ou no_infinite est actif Cette valeur peut tre test e par l interm diaire de la r gle
152. 32 click_up x y 0 focus_in pour les edit_field Aucun r sultat n est transmis simplement un succ s ou un chec focus_out pour les edit field Aucun r sultat n est transmis simplement un succ s ou un chec update pour les unit s fen tres ou zones de dessin GRAPHICS qui n ont pas de bitmap et qui ont toujours le pr dicat par d faut sys get_ event li l unit extern_event s il i2 pour les objets externes s il et 12 sont des donn es envoy es par l utilisateur en m me temps que l v nement grace la proc dure send external event s peek_event b e o M me principe et m mes valeurs que la primitive get_event b e o mais ne fait que consulter la queue d v nements sans la modifier L v nement e pour l objet o n est pas supprim de la queue s clear_events e o Supprime tous les v nements d finis par e concernant l objet o aucune unification n est faite ce pr dicat n choue jamais e suit les m mes conventions que pour get event b e 0 5 4 Primitives sp cifiques pour la gestion de menu La primitive set_menu d crite dans cette section permet de d finir ou red finir des menus hi rarchiques Tous les menus popup ou pulldown sont attach s une fen tre Il existe n anmoins un support particulier pour accueillir des menus g n raux l application appel la barre de menus de Prolog 5 4 1 Sauvegarde et changement de la barre de menu La barre de me
153. 8 Manipulation des modules compil s R3 32 4 Op rations PredeMmie issisesccsssiscsssssessasedesscsssocssnesssseascdsevscdcondedivascceus R4 1 Al MES TES OPEL SG AG MEN Are ns sr R4 1 4 2 Les op rations arithm tiques R4 2 A 3s Affectation niaaa RE eae R4 7 4 4 Op rations sur les cha nes Le aus nus R4 9 4 5 Composition et d composition d objets R4 10 4 6 Comparaison de termes quelconques R 4 14 5 Les entr es SONTES ne anne olsviactesctosaiecsssbesdseesbeniaetes R5 1 We ATCA CCS RSR RC UE aT R5 1 Sil ACES ot tosh luce sete et ae et rl R5 2 5 1 1 R gles pour l entr e AS Men RAS nr ee R5 3 5 1 2 Modification de l unit d entr e R5 8 DD NOLE Sia sah cea a tk Saas ort ea Fad Star ante N R5 9 5 2 1 R gles pour la SOME ar nade oo antes R5 9 5 2 2 Modification de l unit de sortie R5 12 5 3 Chargement et adaptation du module de dessin R5 14 5 4 D claration d Operate ts sais cicvsescecdieecaananisczsesnsaiaeccneastdedivnanies R5 15 6 L environnement esse R6 1 6 1 Comment sortir de Prolog nent R6 1 6 2 D marrage automatique d un programme Prolog R6 1 6 3 Edition de programmes sn use ern tent nent R6 2 6 3 1 Modifier des paquets de r gles R6 2 6 3 2 Editer et recompiler un module source R6 3 6 3 3 Editer un fichier de texte quelconque R6 4 G4 Date Temps et mestres as ec D a ct R6 4 6 5 Lien ayec Tes Vs
154. 9 gcR6 25 gendialog U 5 41 Index Prolog II Windows gensymbol R 4 12 getR 10 15 get0 R 10 16 getenv R 6 5 get arg type R 7 3 get _attribute U 5 17 get byte R 10 15 get char R 10 15 get code R 10 16 get double R 7 5 get error complement R 8 11 get event U 5 13 get event U 5 20 get formats R 8 8 9 get integer R 7 5 get key U5 36 get local object U 5 20 get_max_string R 7 5 get objects U 5 20 get_option R 6 24 get real R 7 5 get screen U 5 6 get string R 7 5 get strterm R 7 9 get term R 7 16 get tlvR2 15 get window U 5 10 graphic mo U 1 3 4 graphic mo U 5 6 GRAPHICS U 5 3 8 graphics U 5 8 17 graphic area R 5 2 graphic system U 5 6 graphstr mo U 1 3 group U 5 17 gr arc U 5 31 gr_arc U 5 32 PrologIA 1 6 Index Prolog II Windows gr button hit U5 35 gr_choosecolor U 5 26 er click U 5 33 er_clickr U 5 34 gr color U5 25 gr _colorl U5 25 gr color U5 25 gr _color3 U5 25 er dialog U 1 3 er dialog U 5 41 gr draw buttons U 5 34 er editf U 5 35 gr erase U 5 29 gr font U5 28 gr getmouse U 5 34 gr _getmouser U 5 34 gr getorigin U 5 29 gr get mode U5 28 gr get pen U5 27 gr_icon U 5 32 er line U5 29 gr _lineto U 5 29 gr list U 5 37 gr load U 5 32 gr mode U 5 27 gr move U5 29 gr moveto U 5 29 gr pen U5 26 gr _penloc U 5 29 gr _penlocr U 5 29 gr polygon U 5
155. Ce chapitre montre comment ajouter de nouvelles r gles faisant r f rence des fonctions externes crites en C ou tout autre langage compatible avec C et d crit les proc dures d interface La m thode d crite ici est la seule qui fonctionne en mode 16 bits sur PC Sinon une m thode plus simple utilisant des descripteurs peut tre utilis e avec le compilateur voir le chapitre 7 du Manuel de R f rence La fonction externe peut provoquer un backtracking renvoyer une erreur qui sera trait e par le m canisme block ou afficher un message d fini par l utilisateur Le module utilisateur prouser sert de relais entre Prolog et les routines utilisateur crites en C de m me le module utilisateur prouser sert de relais entre Prolog et les routines utilisateur crites en Fortran De cette mani re il est possible d avoir simultan ment des r gles pr d finies dans les deux langages Les fichiers sources sont inclus dans le volume de distribution D 1 Description g n rale Nous rappelons que l appel depuis Prolog d une fonction externe d finie en C peut se faire de deux mani res 1 Par la m thode des descripteurs voir R 7 6 C est une m thode d appel direct avec g n ration automatique de la r gle d appel Prolog 2 En utilisant un parasite via une proc dure relais d finie dans un module utilisateur fourni dans le kit C est la m thode d crite dans ce chapitre Quand Prolog est lanc sans sp cifier d tat ini
156. Cette commande produit le chargement des modules sauvegard s dans le fichier indiqu celui ci doit avoir t produit par la commande save Les r gles d initialisation de module si elle existent sont ex cut es l est une liste de la forme lt pref subs gt lt prefk subsk gt nil qui sp cifie le renommage des modules charg s pref sera substitu par subs1 pref2 par subs2 etc Si un module renommer n est pas pr sent la substitution est ignor e pour ce module et un message peut tre affich Exemple 5Cela d pend du niveau de warning choisi par une option au lancement de Prolog 6Cela d pend du niveau de warning choisi par une option au lancement de Prolog ProloglA J Prolog LIE PIT AZT AEN AGE Structuration et modification des r gles R3 33 gt load myfile mo lt data donnees gt nil Une tentative de chargement d un l ment r gle ou tableau d ja connu donne lieu a une erreur d finition multiple La deuxi me forme load f quivaut a load f nil no_index i a Suppression de l indexation d un paquet de r gles compil es Provoque la d sindexation du paquet de r gles compil es dont l identificateur d acc s est i et l arit a Ne fait rien si la r gle n est pas index e On a int r t utiliser cette r gle avant de manipuler dynamiquement des r gles lues par insert de mani re ce que les modifications soient toujours prises en compte de l
157. D claration statique La d claration des objets externes et des objets Prolog associ s peut se faire statiquement par des tables de descripteurs qui sont parcourues par Prolog au moment de l initialisation Ces tables au moment du chargement de Prolog vont cr er les liens et les d clarations Prolog n cessaires Les objets Prolog ainsi cr s et leur lien avec l objet externe sont permanents durant toute la session En particulier ils ne sont pas supprim s par les r gles pr d finies kill module kill_array Suppress Un descripteur de r f rence externe voir fichier proext h est une structure compos e de quatre champs qui contiennent les l ments n cessaires que nous avons identifi s typedef struct char name int type int size POINTER adresse EXTERNAL DESCRIPTOR Pour ajouter ces objets Prolog la machine Prolog doit tre tendue par un ou plusieurs modules externes contenant la d claration de ces descripteurs Un descripteur doit tre affect une table de descripteurs qui doit tre point e par le tableau g n ral PRO EXTERNAL Le programme prolink d dition de liens construit automatiquement ce tableau PRO EXTERNAL dans le module prodesc puis reconstruit la machine Prolog PRO EXTERNAL est un tableau d adresses de tables de descripteurs il doit tre termin par une adresse nulle 0 Dans sa version initiale du kit il contient la table du fichier prouser EXTERNAL DESCRIPTOR PRO
158. D permet de le d finir comme bouton par d faut c est dire que tout carriage return qui ne sera pas capt par un autre objet activera ce bouton Ces boutons sont con us pour qu il n y en ait qu un seul par fen tre Si ce n est pas le cas le comportement n est pas garanti et est d pendant du syst me h te top_attach left_attach right_attach bottom_attach new_radio_button o g p v 5 b lt x1 y1 x2 y2 gt Cr e un radio button identifi par o dont le texte est s g est un identificateur Prolog qui repr sente le groupe auquel appartient le bouton Le bouton et le texte seront inscrits dans un rectangle de coordonn es x y1 x2 y2 dans la fen tre parente p Il sera visible selon la valeur de v ProloglA J Prolog HERITAGE J Prolog LIE PIT AZT AEN AGE Primitives graphiques U5 15 x2 et y2 doivent tre libres ils seront alors unifi s avec les coordonn es effectives du coin inf rieur droit de l objet apr s cr ation b peut tre nil sys get_event ou un identificateur de r gle Dans ce dernier cas chaque activation du bouton le but b 0 est lanc new_edit_field o p v b lt x1 yl x2 y2 gt 1 Cr e un editfield identifi par o dont les coordonn es sont x y1 x2 y2 dans la fen tre parente p Il sera visible selon la valeur de v b peut tre nil sys get_event ou un identificateur de r gle Dans ce dernier cas chaque caract re tap dans l editfield le but b o c est la
159. E Z J Prolog LE RYT AEE CIS LATE 4 1 4 2 4 3 4 4 4 5 4 6 4 Op rations pr d finies sur les donn es Les tests de type Les op rations arithm tiques Affectation Op rations sur les cha nes Composition et d composition d objets Comparaison de termes quelconques 4 1 Les tests de type Ces r gles permettent de conna tre le type d un objet Si l argument est une variable libre ces r gles n ont pas de sens et chouent ident t V rifie que est un identificateur integer t V rifie que est un entier real t V rifie que f est un r el double t Identique a real t dot t V rifie que est de la forme 1 12 ou 7 2 string t V rifie que est une chaine tuple t V rifie que est un terme de la forme ft tn ou lt t tn gt Les primitives suivantes concernent l tat des variables et ont donc un esprit voisin de celui des tests de type bound x bound x s efface si x est li Une variable est consid r e comme li e si elle a t unifi e contre ProloglA R4 2 Manuel de R f rence une constante entier r el identificateur chaine un terme de la forme f 72 un terme de la forme lt f1 t2 tn gt ou fL t2 tn free x S efface uniquement si x n est pas li var_time x n Date de cr ation d une variable x doit tre une variable libre Cette r gle pr d finie unifie n avec la date de cr at
160. HER TAGE E Quelques exemples de programmes Prolog I C 17 Automate d etat fini accepte s nil gt etat_final s accepte s e x gt fleche s e at accepte s x refuse s nil gt non_etat_final s refuse s e x gt fleche s e s refuse s x etat _final lt final aa s1 bb s2 gt gt non etat final lt non final aa s1l bb s2 gt gt fleche lt f aa sl1 bb s2 gt a s1 gt fleche lt f aa si bb s2 gt b s2 gt Calcul d un automate de taille donnee automate de taille s n gt automate de taille s nil n nil automate de taille nil 0 1 gt automate de taille s l n l gt element de s l automate de taille l n 1l automate de taille s l suc n 1 gt non element de s l Eleche s a s1 Eleche s b s2 automate de taille sl s2 1 n s 1 element de s s 1 gt element _de s s 1 gt dif s s element _de s 1 j non element _de s nil gt non element de s s l gt dif s s non element de s l Enumeration des entiers de Peano entier de Peano 0 gt entier de Peano suc n gt entier de Peano n ProloglA Proliy C 18 Annexe C HERITAGE ProloglA J Prolog LIE RYT AIEEE CIS LATE D 1 D 2 D 3 D 4 Annexe D ajout de r gles externes m thode des parasites Description g n rale R gle Prolog r alisant l interface Appel du programme externe Comment provoquer un backtracking ou renvoyer une erreur
161. Le mode trace est actif d s l effacement d un des pr dicats pr d finis trace 0 ou trace 1 Il est d sactiv par l effacement du pr dicat pr d fini no_trace 0 ProloglA J Prolog LIE PIT AZT AEN AGE 6 6 2 L environnement R6 7 trace Active la trace trace f Active la trace Redirigera toutes les impressions de la trace dans le fichier de nom f cha ne Prolog Le fichier est ferm l ex cution d un pr dicat de d sactivation de l outil de mise au point Si les impressions de mise au point taient d j redirig es le pr c dent fichier est ferm pour tre remplac parf no_trace D sactive la trace Mode interactif Si la trace est simple activer elle peut rapidement donner un flot d informations important o il serait difficile de se rep rer A ce moment l le mode interactif devient d une grande utilit puisqu il permet d aller directement l information importante Ses atouts sont e les commandes de progression dans le code e le param trage de l information produire e les commandes annexes sur l ex cution Le mode interactif permet de choisir les informations qu on veut extraire du programme dans le format appropri sans modifier le programme et seulement dans les portions de code d sign es Il permet surtout de prendre le contr le o l on souhaite pour lancer des actions 6 6 2 1 Points d arr t En mode interactif le debugger va proposer sa bani re
162. PROLOG II www prolog heritage org Version restaur e a 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 I MANUEL DE REFERENCE Manuel de R f rence ProloglA G n ralit s iii 7 Prolog LIE PIT AZT AEN AGE Table des mati res Fable Ges Mater eS sl a tn An aeree otaa adaa iaat iii VRP OOUCHOM ES E An A T Ac ix D AAUATOISA NON NCA RME SRE ns CA SAR i eiee ix Performante S ir nn iaa aaa a a aa ix Mo d larit nasasa aloe east A EN ERE weet cats x Ouverture vers l RI EUL ns cot aot Seniesa Meat re ne x Environnement de programmation x Interface SMPhIQUes ns Nitro xi Sur ce Manuels dinde tintin xiii Garantie et responsabilit s sssessssseeesesessesessses XV Droits Ch AU cose cade oss te ER nu D E XV 0 D buter avec Prolog nie era RO 1 0 1 Le on 1 Lancement de Prolog hearts RO 1 0 2 Le on 2 Utilisation d un programme d exemple RO 2 0 3 Le on 33 gt LD Raiteur inn ent ea RO 4 0 4 Les erreurs les plus courantes RO 5 0 4 1 D bordement de l espace de code RO 5 4 2 Tnterr ptio iee seis shslc eth deck Us A dent RO 5 0 4 3 Erreurs d tect es en cours d insertion RO 6 0 4 4 Erreurs concernant les fichiers RO 6 O45 Erreurs d Svitaxe random eniai RO 6 0 4 6 Erreurs d R CUHONs se
163. Paris gt habite_a Jean Marseille gt habite_a Marie Paris gt Faisons quelques essais avec ce programme O habite Pierre gt habite_a Pierre x x Paris gt Qui habite a Paris gt habite_a x Paris x Pierre x Marie gt Qui habite o gt habite_ a x y x Pierre y Paris x Jean y Marseille x Marie y Paris 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 et on se retrouve sous l interpr teur de commandes du syst me d exploitation 0 2 Le on 2 Utilisation d un programme d exemple Dans ce qui suit on utilisera le programme menu p2 qui se trouve d crit dans de nombreuses publications Ce programme se trouve dans le r pertoire d exemples du Kit Prolog II Pour cette le on il vous faut au pr alable recopier le fichier menu p2 dans votre r pertoire courant Il suffit alors de lancer Prolog puis ins rer le fichier menu p2 en tapant PROLOG II gt echo insert menu p2 ProloglA J Prolog LITE 2 TDIT D buter avec Prolog RO 3 Poole insert lit des r gles sur le fichier sp cifi et les ins re dans le module courant Lorsque le fichier d entr e est puis l entr e courante bascule sur le clavier qui est l unit d entr e par d faut La primiti
164. Permettre la non continuit d un paquet de r gles Lorsqu une r gle d identificateur d acc s et d arit a sera compil e au moyen du pr dicat insert elle sera ajout e la fin de son paquet Cette directive permet de scinder les paquets de r gles au sein d un m me ou de plusieurs fichiers Noter que cette directive n a aucun effet sur une compilation au moyen du pr dicat reinsert qui crasera le paquet de r gles existant par le nouveau rencontr Ceci est une directive de compilation et non pas un pr dicat c est dire qu elle peut figurer au milieu d un source que l on compile mais ne peut se trouver dans une queue de r gle dynamic i a D clarer un paquet de r gles dynamiques Tous les paquets de r gles Prolog II sont dynamiques c est dire qu ils peuvent subir des modifications Par cons quent cette directive n a aucun effet et n existe que par compatibilit avec la norme Prolog Ceci est une directive de compilation et non pas un pr dicat c est dire qu elle peut figurer au milieu d un source que l on compile mais ne peut se trouver dans une queue de r gle ensure _loaded f S assurer d une seule inclusion de la compilation d un fichier R alise la compilation du fichier f l endroit o se trouve la directive si ce fichier n a pas d j t compil au cours de cette m me phase de compilation sinon ne fait rien En fin de compilation de plus haut niveau d imbrication et donc pour une nouvelle ph
165. Prolog effectue de toute fagon une copie des arguments dans une zone interm diaire dont la taille peut tre param tr e sur la ligne de commande voir le chapitre 2 du Manuel d Utilisation 7 7 2 2 Convention pour le retour de la fonction Il est n cessaire de connaitre le type du retour de la fonction et de disposer d un terme Prolog qui sera unifi avec sa valeur La convention est la suivante le terme qui repr sente le r sultat doit tre un doublet lt type_r sultat variable r sultat gt dont le premier l ment type_r sultat est une cha ne qui indique le type I pour un retour entier R ou X pour un retour r el dont le deuxi me l ment variable_r sultat sera unifi avec la valeur retourn e par la fonction entier ou r el 7 7 2 3 Convention pour des param tres avec valeur de retour Pour une donn e C avec valeur de retour attendue il est n cessaire d avoir deux donn es Prolog une premi re qui doit tre connue au moment de l appel et qui sert transmettre la valeur initiale la fonction C une deuxi me qui sera unifi e avec la nouvelle valeur obtenue de la fonction C On distingue parmi les types de donn es des types simples et des types qui n cessitent une allocation de zone m moire Note Certaines conventions avec valeur s de retour sp cifient des tailles de zones m moire allouer pour ranger le s r sultat s des fonctions C appel es L utilisateur doit donc imp rat
166. Prolog peut tre utilis e comme un sous programme d un programme quelconque Pour simplifier la compr hension de sa manipulation depuis un langage proc dural on peut pr senter Prolog comme une machine tats ou points d arr t un jeu de proc dures permet de faire transiter la machine Prolog de l tat courant vers un nouvel tat Hormis aux points d arr t de la machine Prolog un programme C ne peut tre appel que par une r gle pr d finie Celle ci peut empiler un nouveau but ou provoquer une erreur A un point d arr t de la machine Prolog un programme C peut empiler un nouveau but r activer la machine jusqu au prochain point d arr t pour avoir une autre solution ou provoquer l abandon du but en cours avec retour l tat pr c dent 8 1 Principes de base L tat normal pour une machine Prolog consiste videmment en l ex cution de la boucle d effacement d une suite de buts cf chapitre 2 de ce manuel cette boucle est appel e parfois horloge Prolog Lorsqu elle se trouve dans cette situation nous dirons que la machine Prolog est active Quand la machine Prolog s active elle poss de d j une suite initiale de buts effacer le processus d effacement choix d une r gle unification de la t te etc dure tant que la suite de buts courante n est pas vide quand cette suite est vide la machine tombe dans un point d arr t ProloglA U3 2 Manuel d Utilisation Windows Dans ce paragr
167. R10 2 7 gt gt R 1 23 gt gt R4 6 gt gt R 10 3 R10 2 lt R 10 2 12 lt R 10 2 12 gt R 10 2 12 gt R 10 2 12 abolish R 10 5 abs R 4 5 activity U 5 17 add R 4 4 add_ implicit R 3 12 add sentence terminator R 5 7 add _stdmenu U 5 22 add tlv R2 14 alias R 10 13 alloc R 6 23 append R 5 2 arg R4 11 argR 10 8 arg2 R 4 10 assert R 2 11 12 assert R 3 21 assert R 10 5 1 2 Index Prolog II Windows assert U 2 7 assert R 3 22 asserta R 3 21 asserta R 10 5 assertn R 3 22 assertz R 3 22 assertz R 10 5 assign R 4 7 assign U 2 7 atR 10 14 atan R 4 6 atom R 10 6 atomic R 10 6 atom chars R 10 8 atom codes R 10 9 atom concat R 10 9 atom length R 10 9 attachement U 5 3 at end of stream R 10 15 background U 5 17 backtrack term R 4 8 bagof R 2 4 beep R 5 9 binary R 5 1 block R 2 4 5 block U 2 7 block exit R 2 4 5 block_exit R 6 11 block_exit U 2 8 bottom_attach U 5 13 bottom right U 5 17 bound R 2 6 bound R 4 2 bounded R 10 19 buttonD U 5 14 callR 10 4 callC R 7 26 fs 7 Prolog TRITATE V UIUC callpro def U 1 6 callpro h U 1 6 callprol lib U 1 6 callpros lib U 1 6 cassign R 4 7 catch R 10 4 ceiling R 4 5 char U 5 20 chars nb U 5 15 CHAR ARRAY R 7 18 21 char codeR4 9 char_conversion R 10 19 check button U 5 4 check_button U 5 17 check_item U 5 24 chrono R 6 4
168. Request _hConversation _xRequest Effectue de mani re synchrone la requ te xRequest aupr s du Serveur li la conversation Conversation Le statut de terminaison de cette primitive succ s ou erreur est li celui de la requ te Les requ tes reconnues sont les suivantes ddeRequestData _tltem _xValue effectue une requ te Request standard pour la donn e nomm e par la cha ne f tem et tente d unifier le r sultat une cha ne de texte Prolog avec la valeur de xValue ddeWarmLinkData _tltem ddeOpen ou ddeWarmLinkData _tItem ddeClose effectue une requ te Advise standard pour la donn e nomm e par la cha ne _t tem demandant un abonnement de type notification de modification de cette donn e lien ti de ou r silie ce m me abonnement ddeHotLinkData _tltem ddeOpen ou ddeHotLinkData _tltem ddeClose effectue une requ te Advise standard pour la donn e nomm e par la cha ne _t tem demandant un abonnement de type mise jour syst matique de cette donn e lien chaud ou r silie ce m me abonnement ProloglA Prolog U4 10 Manuel d Utilisation Windows HERITA G E ddePokeData _tltem _xData effectue une requ te Poke standard pour l Item nomm par la cha ne _ tem adressant ainsi au Serveur la donn e _xData qui est soit une cha ne de texte soit nil simple signal sans donn e jointe ddeExecute _xArgument effectue une requ te Execute standard au Serveur lui passant une command
169. S uns sean ne MN uen de R8 1 8 2 Initialisation et terminaison de Prolog R8 4 8 3 Empilement d un but PrOIO nan mnt nan sen R8 6 8 4 PROSPER RE SR Re eC R8 7 8 5 M thode simple d appel d un but Prolog R8 8 Boke D scptioN mieia iia e En ee een ne R8 8 8 3 2 VE REMIPIC nr Rene tt R8 9 8 6 Autres FONCTIONS SE me Rue nn ce ce cc et R8 10 9 TRVEE PUP UOMS 30355 caissesasessavespesesescusesssoanss ouasavesnadnteustercovebavenntsesdenussanyee R9 1 Di Conception dns R9 I 9 2 Description des interfaces is ciateastvscsteet eaten ie ssieaceatenan counts R9 3 93 Exemple COMPO Le ares Ru tr eau t unitate R9 3 10 Extensions Edinburgh ssesssesssesssocssoossooessosssscessosssoossosssosssssee R10 1 LOL SAXE STAR Sec SENG e ce nn ae dd Natal oe i SiGe a hie R10 1 10 LT CCS He US nantes R10 1 DORE LES OCT ACIS oxo edt energised nn R10 2 102 Re OM POG 2522 05 RS SR das R 10 3 10 3 Manipulation des r gles unis AN iaininnaaute R10 5 10 4 Op rations pr d finies sur les donn es R10 6 1041 L s tests d AVC radars nement R10 6 10 4 2 Les op rations arithm tiques R10 7 10 4 3 Composition et d composition d objets R10 8 10 4 3 Comparaison de termes quelconques 0 664 R10 11 10 5 eS CMS SOMMES rl RS a aea R 10 12 10 53 17 G R AIHES nent SRE NU e R 10 12 10 52 ENTES accuse pieseet tie eaten beet tnt R 10 14 10 5 2 1 Interpr tation des cha nes de caract res R 10 14
170. Service DDE PROLOG Service Automatique Data pour RequestData en 4 2 5 Exemples La requ te Execute avec la donn e eg production x 2 my_var r ussit et associe dans l interface la valeur de x ici production l identifiant my var La requ te Execute avec la donn e eg production x 1 my atom r ussit La requ te Request pour l item my_ var r ussit et rend production ProloglA Prolog U4 8 Manuel d Utilisation Windows HERITAGE La requ te Request pour l item my_atom r ussit et rend production 1 T argument La requ te Execute avec la donn e arg2 X Y Z 3 my_arg r ussit mais le message gt lt v33 gt ARGUMENT DE MAUVAIS TYPE est affich dans la console de Prolog H La requ te Request pour l item my_arg r ussit et rend Error 253 La requ te Advise ou HotLinkData pour l item enumerate r ussit La requ te Execute avec donn e enum i 5 1 enumerate r ussit et le Client re oit successivement 1 2 3 4 5 La requ te Request pour l item enumerate r ussit et rend 5 4 3 Programmer en Prolog II un applicatif Client ou Serveur Il est n cessaire dans les deux cas de charger le module dde mo qui installe les primitives DDE Sa d sinstallation se fait par l appel la primitive ddeCleanup 0 Termine toutes les conversations et Services en cours et limine les primitives de Prolog relatives au DDE Cette primitive n est pas le bon moyen
171. U5 7 5 2 1 Cr ation destruction d une fen tre U5 7 5 2 2 Configuration manipulation d une fen tre U5 10 5 2 3 Rafraichissement des zones graphiques U5 12 5 3 Primitives l mentaires de gestion des objets attach s eeeeeee AMIN TONIC UTS ss nn Rs ne An Te nea U5 13 5 3 1 Cr ation destruction d objets U5 13 5 3 2 Configuration d objets sn ntiinifue U5 17 5 3 3 Gestion des V NEMENTS enr emelsemsnrone U 5 20 5 4 Primitives sp cifiques pour la gestion de menu U5 21 ProloglA J Prolog LIE RITA SEE TOME YAO Prolog INT RITA LI LITE Manuel d Utilisation Windows 5 4 1 Sauvegarde et changement de la barre de menu U5 21 5 4 2 Description A UIMEND een ess U5 22 5 5 Mode de dessin et d criture latines U5 25 5 6 Dessin et positionnement 2 ds ns RMS U5 29 5 7 Position de la souris dans une zone graphique U 5 33 5 8 Primitives sp ciales de saisies le tits U5 34 5 8 1 Simulation de boutons U5 34 5 8 2 Affichage de message avec validation U5 35 oon RAM OSIE CO TERTE CR ne rene Renee nee renee U5 35 5 8 4 Boites de cho icciss eset susie aasdetvisrcctiheastecneenee U5 37 S8 Chox T MOINS re ee U5 39 5 8 6 Choix d un noeud d un arbre U5 41 5 9 R gles pour g rer des objets structur s U5 41 5 10 Envoi d v nements Prolog depuis un objet externe U 5 48 ProloglA vi Manuel d Utilisation Wind
172. Windows lorsque sa lecture est faite de mani re interne par l environnement de Prolog 3 5 Extensions en mode 16 bits R serv Windows 3 Dans l environnement 16 bits certaines fonctionnalit s ne sont pas accessibles Cet environnement ne permet pas l appel direct de fonctions C via le pr dicat callC la cr ation de zones partag es l utilisation de descripteurs et l utilisation des fonctions new_pattern et get_ formats L ajout de proc dures externes est limit la m thode des parasites d crite en Annexe D Dans la m thode des liens par parasites un module utilisateur sert de relais entre Prolog et les routines utilisateur crites en C Les num ros de parasites 20000 29999 sont r serv s aux routines C li es ce mode Ce module peut tre d velopp comme pour une DLL Windows 3 standard Le temps de commutation et de transfert de contr le est tr s rapide et tout se passe comme si l extension tait directement li e l application 32 bits Exemple complet ajout d une r gle en mode 16 bits Voici un exemple complet d crivant l ensemble des op rations ex cuter pour cr er une nouvelle r gle pr d finie implant e par une routine externe en code 16 bits ProloglA J Prolog WTA NATE LITE a J sf 407 Sp cificit s de Prolog II Windows U3 5 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
173. _menu pulldown menu listbox drawing_area fontheight v est la hauteur en pixels de la fonte utilis e par l objet La hauteur de la fonte est la hauteur du rectangle dans lequel s inscrivent les caract res l interligne est compris group v est unifi avec l identificateur de groupe du radio button o sitems_nb v est unifi avec le nombre d items de la listbox o s set_attribute o a v Permet de modifier ou de pr ciser la configuration des objets o est l identification de l objet a est l identification de l attribut v est la valeur de l attribut Les attributs possibles d pendent du type de l objets Les attributs g n raux sont les suivants activity indique si l objet ou l item de menu r agit aux v nements ou pas v vaut respectivement 1 ou 0 N est pas valable pour les labels background concerne la couleur de fond de l objet v est un entier ou un identificateur et suit les m mes conventions que dans la primitive gr_color2 Voir 5 5 Mode de dessin et d criture bottom right concerne la position du coin ext rieur inf rieur droit de l objet v est de la forme lt p p2 gt o p est l abscisse p2 est l ordonn e A pour effet le redimensionnement de l objet N est pas valable pour les menus cursor concerne la forme du curseur de la souris quand il est l int rieur de la fen tre o v est un des identificateurs suivants default wait cross Pour set_attribute si o vaut
174. a L L aa bb 1 aa cc 2 nil file dictionary f L pref Unifie pref avec la liste des pr fixes des modules contenant des r gles pr sents dans le fichier f Ce fichier doit contenir du code prolog compil f est donc un module objet ou un tat binaire de d marrage il est obtenu grace a l un des pr dicats de sauvegarde exit save_state save 3 5 Modules La d finition de modules en Prolog n cessite de pouvoir traiter commod ment des cas aussi diff rents que ceux que l on peut rencontrer par exemple dans un syst me de langue naturelle On y trouve essentiellement deux modules le premier est le lexique qui contient beaucoup de noms de la base de donn es et de la grammaire et peu de noms de r gles Le deuxi me est la grammaire qui contient essentiellement des noms qui lui sont propres et des appels au lexique Consid rons l exemple suivant lexicon pn data Peter grammar singular gt lexicon pn data John grammar singular gt lexicon verba data smiles grammar singular gt lexicon adj data plural grammar plural gt ProloglA Prolog R3 14 Manuel de R f rence HERITAGE grammar sentence x z gt grammar sn x y g grammar vp Y 2 9 grammar sn x 1 1 g gt lexicon pn x g D finir des conventions qui permettent de simplifier l criture des identificateurs dans des cas aussi extr mes est la raison profonde de l laboration du syst me de contexte de lecture d crit dans les cha
175. a cha ne r sultat charge l utilisateur de r server la place n cessaire ProloglA A Prolog Poly RSR PU HERITAGE Prolog et les caract res E 5 ProloglA HERITAGE Bulag Annexe F Table ISO 8859 1 PEEP EEEN EE RAAE bob EEE EEE Jele lolelohs fel lo Ae PER see Q BL EL HET ES Or NM lt f LD OK OO moa FY J D lt n o at OP gt x r a Z Y OK NMDTNORWMDOLAMOOOAWML ProloglA Proliy Fa Annexe F HERITAGE ProloglA PROLOG II MANUEL D UTILISATION WINDOWS ii Manuel d Utilisation Windows ProloglA Manuel d Utilisation Windows iii J Prolog LIE PIT AZT AEN AGE Table des mati res Table des mati res e ssesoessessoesoessessoesoessessossoossessoseoossossoesoossossossoossossoseeossosse iii AVATIE P PO POS sine ni ide on assests eens daramannesteuaalte vii 1 Guide d installation sous l environnement Windows U1 1 KO PRS ARNG ETES SR e aaa U1 1 1 1 Mat riel et logiciel requis U1 1 1 1 1 Pour lancer Prolog sn nn nn nn nent U1 1 1 1 2 Pour ajouter des extensions ans tlaniaennasal m thode standard en 32 bits U1 1 1 1 3 Pour ajouter des extensions en code 16 bits U1 2 1 1 4 Pour cr er des applications et les diffuser 0 U1 2 1 2 Contenu du kit d installation U1 2 1 2 1 Fichiers indispensables pour utiliser Prolog U1 2 1 2 2 Fichiers annexes pour l utilisation de Prolog
176. a m me mani re N a pas d effet sur les faits non compil s reload f reload f l Chargement de modules sauv s M me fonctionnement que load sauf dans le cas de red finition d un l ment la version rencontr e dans le fichier remplace celle qui se trouve en m moire sans produire d erreur 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 Si un module n existe pas la sauvegarde se poursuit apr s affichage ventuel d un message Exemple gt save data dict myfile mo Le fichier produit est un fichier de code objet ce code est exploitable uniquement par une machine Prolog La m morisation de programmes sous cette forme permet un rechargement plus rapide qu partir des fichiers sources save state s Sauvegarde d un tat de d marrage Sauvegarde tout le programme r gles tableaux identificateurs assign s y compris le superviseur Prolog II dans un fichier de nom s o s est une cha ne qui peut tre ensuite utilis comme fichier de d marrage Cette primitive a le m me effet que exit s mais sans sortir de Prolog 7Cela d pend du niveau de warning choisi par une option au lancement de Prolog ProloglA HERITAG
177. a pr fix e respectivement par 0b 0o 0 Ox Par d faut une mantisse non pr fix e sera consid r e en base d cimale Les petits entiers inf rieurs 256 pourront galement tre exprim s l aide du pr fixe 0 suivi d un caract re la valeur de l entier sera alors le code du caract re Par exemple les expressions suivantes repr sentent des entiers Expression Valeur 0b110 6 00110 72 0110 110 0x110 272 O A 65 On notera que contrairement a d autres langages les nombres r els doivent comporter un exposant explicite l expression 12 34 ne d finit pas un nombre r el mais une paire point e form e des deux entiers 12 et 34 En revanche 12 34e0 est un r el correct C est le choix par d faut en syntaxe Prolog IL il est n anmoins possible pour se ramener une syntaxe standard de le modifier par une option sur la ligne de commande au lancement de Prolog cf 2 3 du manuel d utilisation Les nombres r els sont cod s en double pr cision cela correspond au type double du standard IEEE 64 bits La lettre introduisant l exposant peut tre une des suivantes e E d ou D On pr f rera toutefois e et E 3 Attention aux caract res tendus leur valeur d pend du mode choisi ISO 8859 1 ou code de la machine h te ProloglA R1 8 Manuel de R f rence Cha nes de caract res Les cha nes de caract res sont encadr es par des doubles quotes Tous les caract res imprimables peuvent f
178. ableau doit tre indiqu e par le pointeur NULL apr s le dernier l ment dont l argument valeur _initiale est une liste Prolog termin e par nil de cha nes point es par le tableau en entr e ni au minimum dont l argument est un entier il offre la possibilit de laisser Prolog la gestion allocation et lib ration du buffer de caract res pour les cha nes en sortie Si l utilisateur g re le s espace s des cha nes en sortie nbre max de caract res doit valoir 0 Si l utilisateur laisse Prolog le soin d allouer et par la suite lib rer un buffer de caract res nbre max de caract res doit tre non nul il indique alors le nombre de caract res total maximal n cessaire pour stocker tous les caract res de toutes les cha nes du tableau La valeur du premier l ment du tableau pointeur de cha ne de caract res sera dans ce cas l adresse de cet espace o est copi e la premi re cha ne en entr e dont l l ment variable r sultat sera unifi avec le r sultat une liste Prolog termin e par nil de cha nes Par exemple relaiProlog lt il tait une fois x 100 5 gt est quivalent aux instructions C suivantes char argl 5 char buffer 100 strcpy buffer il arg1 0 buffer argl 1 tait arg1 2 une arg1 3 fois fonctionC argl suivies de l affectation de la variable x avec les nouvelles valeurs de arg 7 7 3 Exemple m thode simple pour appeler une fo
179. ace du dictionnaire 11 12 aucun espace ProloglA R 6 24 Manuel de R f rence edinburgh Permet de passer en mode Edinburgh lorsque l on est en mode Prolog II change de syntaxe ajoute des r gles pr d finies ajoute et modifie des op rateurs Cette primitive provoque le chargement du module edinburg mo get_option o x Permet de connaitre la valeur d une option de comportement dans la session o doit tre une cha ne d un caract re repr sentant l option x est unifi avec une cha ne d un caract re repr sentant la valeur de l option La signification des caract res est celle d finie par les conventions de l option de la ligne de commande f cf U2 3 Par exemple pour conna tre la syntaxe des r els choisie pour la session gt get option r x x P prologll Permet de passer en mode Prolog II lorsque l on est en mode Edinburgh change de syntaxe modifie les op rateurs supprime les r gles pr d finies sp cifiques Edinburgh prologllE Permet de passer en mode Prolog II lorsque l on est en mode Edinburgh en gardant les r gles pr d finies sp cifiques Edinburgh change de syntaxe modifie les op rateurs State Affiche l tat courant des piles et le nom des modules se trouvant en m moire Statistics statistics 12 Permet de visualiser les valeurs maximales atteintes durant une session dans les espaces Prolog La m morisation de ces valeurs est effectu e en mode debug uniquem
180. ags 5 I vals 5 8 put_term 1 MAX TAB 0 0 tags vals 0 0 5 amp err if err goto error creation solution interessante tags 0 V vals 0 O put_term 2 MAX_TAB 0 0 tags vals 0 0 0 amp err if err goto error impression des solutions while err next_solution SOLUTION_EXISTS get_integer 2 amp i amp err valeur de i if err goto error printf solution d ld n n i if err gt 0 goto error kill goal return 0 error printf erreur d a la d ieme etape n err n kill goal return err EXTERNAL DESCRIPTOR prouser _desc exemple C FUNCTION 0 POINTER exemple 0 0 0 0 Vous pouvez trouver un exemple d utilisation de Prolog comme un sous programme dans le fichier princip c qui est le module principal de Prolog 8 5 M thode simple d appel d un but Prolog Une autre m thode plus simple a utiliser permet galement depuis un langage externe d installer un but Prolog et d en r cup rer les solutions ProloglA U3 8 Manuel d Utilisation Windows Elle est plus simple pour installer un but gr ce la fonction new pattern quivalente l ensemble new goal put_term du but et put_term du r sultat Elle est moins efficace sur ce point l car elle utilise l analyseur Prolog Elle est plus simple pour extraire des valeurs de la solution gr ce la fonction get_formats quivalente l ensemble get term et traitement
181. aites appel dans la r gle d initialisation d un module des r gles externes au module il faut que ces r gles soient d j d finies pour que l initialisation se termine Cela signifie que bien qu il n y ait pas de contraintes sur l ordre des paquets de r gles il peut y avoir des contraintes sur l ordre de compilation ou de chargement des modules Il est galement important de noter que les notions de fichier et de module sont compl tement ind pendantes Un m me fichier source peut contenir plusieurs modules et un m me nom de module peut appara tre dans plusieurs fichiers charg s dans la m me session 3 7 _ Ajout suppression et recherche de r gles Le syst me Prolog II comporte un compilateur qui traduit vos programmes sources crits en Prolog dans un langage objet dont le niveau i e le degr de proximit avec la machine h te varie d une machine une autre mais qui est dans tous les cas bien plus efficace que la simple interpr tation du code source Prolog En contre partie il appara t une certaine difficult restituer exactement le texte source de certaines r gles cause de la disparition des noms des variables Le compilateur Prolog II est incr mental la traduction se fait r gle par r gle et transparent chaque r gle est compil e et index e d s sa saisie sans qu il y ait besoin de composer une quelconque commande particuli re Par d faut Prolog I r alise des optimisations la
182. aleur end of file ProloglA R 10 16 Manuel de R f rence get_code C X get _code X X est unifi avec l entier gal au code interne code ISO ou code de la machine h te du premier caract re lu sur l unit d entr e associ e au canal C Si une fin de fichier est rencontr e et que l unit a t ouverte avec l option eof_action eof_ code X est unifi avec la valeur 1 get0 X Identique get_code I peek_byte C X peek_byte X Essaie d unifier X avec le premier octet entier gt 0 en entr e sur l unit associ e au canal C Cette unit doit tre de type binary L octet n est pas lu Ce pr dicat ne modifie donc pas les propri t s position et end_of stream de l unit Si une fin de fichier est rencontr e et que l unit a t ouverte avec l option eof action eof_ code X est unifi avec la valeur 1 peek char C X peek_char X Essaie d unifier X avec le premier caract re en entr e sur l unit associ e au canal C Le caract re n est pas lu Ce pr dicat ne modifie donc pas les propri t s position et end_of stream de l unit Si une fin de fichier est rencontr e et que l unit a t ouverte avec l option eof action eof code X est unifi avec la valeur end of file peek_code C X peek code X Essaie d unifier X avec l entier gal au code interne code ISO ou code de la machine h te du premier caract re en entr e sur l unit associ e au canal C Le caract re n est pas lu Ce pr
183. ant o but_prolog ob it aux contraintes pr c demment expos es Index est le num ro bas en 1 de l argument de but prolog r cup rer Identifiant a la syntaxe d un identificateur abr g Prolog sans pr fixe et d signera la solution Lors de l ex cution du but la valeur assign e l argument d sign sera convertie en une cha ne de caract res et associ e son identifiant Si le but choue ou produit une erreur la valeur assign e la solution sera respectivement Failure ou Error nnn nnn tant le code d erreur Prolog Le Client peut r cup rer la ou les solutions de deux mani res Par l envoi d une requ te Request sur l Item Identifiant lanc e apr s l ex cution du but la valeur rendue est celle de la derni re solution courante du but auquel est associ l identifiant dans les conditions d crites pr c demment L inconv nient est qu il n existe aucun moyen de synchronisation automatique permettant de savoir si le but a t ex cut Si ce n est pas le cas la requ te choue sauf si l identifiant utilis contient d j la solution d un autre but lanc pr c demment Le second inconv nient est que l on r cup re seulement la derni re solution Par l envoi d une requ te HotLink ou Advise sur l Item Identifiant lanc e avant ex cution du but lors de l ex cution du but auquel est associ l identifiant chaque solution au sens pr c dent est transmise au Client en tant que mise
184. aphe on d finit les divers tats dans lesquels la machine Prolog peut se trouver lorsqu elle n est pas active tels que les voit le programmeur C ou Pascal ou autre ces tats seront appel s des points d arr t On introduit aussi les proc dures qui font passer la machine d un point d arr t un autre A un point d arr t les tats possibles de la machine sont 0 Machine non initialis e Ceci n est pas vraiment un tat de la machine mais la situation dans laquelle on se trouve avant l initialisation de celle ci allocation de l espace etc La proc dure ProStart appel e une seule fois par session fait passer dans l tat suivant 1 Rien a ex cuter NO_GOAL La machine est initialis e mais a suite de buts effacer est vide La machine vient aussi dans cet tat par son fonctionnement normal lorsqu il n y a plus aucune mani re possible d effacer la suite de buts courante c est dire lorsque toutes les solutions du probl me courant ont t pr c demment obtenues Dans cet tat toute activation de la machine par next _solution la ram ne imm diatement dans le m me tat NO GOAL 2 But pr t tre ex cut Ceci est un tape pr alable dans l activation de la machine la proc dure new goal vient d installer la suite de buts exec _b x le programme appelant doit maintenant l aide des routines standard put_integer put_term etc unifier _b avec le but ou la liste de buts
185. appel avant tout fasserta ou fassertz Il pourra tre appel plusieurs fois pour le m me paquet condition que l argument soit le m me lors des diff rents appels Exemple gt init fassert myrule 7 1 2 3 4 5 nil 5 lt 6 200 gt lt 2 6 300 gt nil o l on choisit une indexation multiple en priorit sur la combinaison des arguments 1 2 et 3 une sur les arguments 4 et 5 combin s une sur le cinqui me argument seul une sur le sixi me argument seul avec une taille de 200 pour la table de hash code associ e cette combinaison une sur la combinaison des arguments 2 et 6 avec une taille de 300 pour sa table de hash code Le choix de la combinaison d index lors de l ex cution d pend du type des arguments d appel priorit aux entiers aux r els aux identificateurs et aux cha nes de caract res Si parmi les arguments correspondant la premi re combinaison l un d entre eux n a pas le bon type c est la deuxi me combinaison qui est examin e et ainsi de suite NB La suppression compl te d un paquet de faits non compil s implique un nouvel appel la primitive init_fassert apr s suppress i a par exemple ProloglA fe A Prolog TA NAT LITE 7 Prolog LIE PIT AZT AEN AGE Structuration et modification des r gles R3 27 La suppression de toutes les r gles d un paquet ne supprime pas la d finition de l indexation init_fassert ne doit pas tre refait apr s
186. ar _code c n char_code c n chrono v clause t1 t2 clear_input close h close h 1 close_context_dictionary s close_input close_input u close_output close output u compound t conc_list_string l s conc_string s1 s2 s3 conc_string s1 s2 s3 consult f copy_term t1 t2 Liste des directives et pr dicats pr d finies B 3 call outml Hello callC sscanf 12 f lt gt R X callC open myfile lt gt I X catch foo 5 test Y outml Hello char code A 65 char_code X 65 clause brother X Y Q close alias1 close alias1 force true close context dictionary data close input myfile close output myfile compound 1 2 conc list string ab cd abed conc string ab X abcd conc string ab cd X consult prog1 p2E copy term 1 2 lt gt zz X Z K copy_term_ with constraints t1 t2 cos m cpu_time v current_context t current _context t 211 212 s current_file u current _file u il i2 current_input n current _op n i f current _output n current _predicate i n current _prolog flag il i2 D date v1 v2 v3 v4 date_string v date_stringF v debug debug u debug n debug n u def_array i n default t1 t2 dif X 3 copy term with constraints 1 2 lt gt X Z K val cos 3 14e0 X c
187. ar un identificateur Les identificateurs tant eux m mes cod s sous forme d entit s atomiques on admet g n ralement qu ils constituent une repr sentation des objets symboliques plus efficace que les cha nes Termes et arbres Toutes les donn es manipul es en Prolog sont des arbres ventuellement infinis dont nous allons tout d abord donner une description informelle Ces arbres sont form s de n uds tiquet s e soit par une constante et dans ce cas ils n ont aucun fils e soit par le caract re point et dans ce cas ils ont deux fils e soit par lt gt ou lt gt ou lt gt ou lt gt ou et dans ce cas le nombre de traits d union correspond au nombre de leurs fils La figure suivante pr sente deux exemples d arbres finis bs lt gt foal an e p plus lt gt lt gt fell let NOW nil fois 5 8 fois 5 8 Figure 1 1 ProloglA Prolog R1 10 Manuel de R f rence ERITAGE La figure 1 2 est un exemple d arbre infini lt gt pe ili 2 ou Cc lt gt fre N et a lt gt PE LA et lt gt b fe OX ou c Hh Sr et a eases et lt gt b an ae ou Cc lt gt YF lle et a LT fe 2 et lt gt b ER Figure 1 2 Remarquons que le dessin des arbres peut tre all g comme le montre la figure 1 3 identificateur au lieu de lt 2 gt Ie AN N X1 KO tue Xn i
188. as le principe de l extension est le m me un certain sous ensemble des noms qui auraient t des repr sentations abr g es d identifi cateurs pour la syntaxe de base est ajout l ensemble des variables Ces deux extensions sont facultatives et incompatibles entre elles C est l utilisateur qui au d marrage de la session Prolog choisit la syntaxe qu il souhaite employer se r f rer au Manuel d Utilisation 2 Certaines combinaisons sont interdites comme 5 1 3 3 Une option sur la ligne de commande permet de rendre l exposant facultatif au prix d une ambigu t avec les listes en syntaxe Prolog II 1 2 est lu comme un r el en entr e Cette r gle n est valide que si cette option est choisie Voir le manuel d utilisation paragraphe 2 3 4 La r gles L2 1 et L2 2 donnent la syntaxe de base des identificateurs Une extension pour la syntaxe Edinburgh est donn e par les r gles L2 3 et L2 4 5 La r gle L2 3 est n cessaire pour exprimer le passage de l identificateur abr g repr sent par un graphic symbol sa repr sentation compl te En effet le caract re qui d limite le pr fixe de l identificateur abr g tant lui m me un caract re graphique une ambigu t appara trait si les quotes n taient pas ajout es Par exemple sys est vu par l analyseur d unit s lexicales comme l identificateur sys imm diatement suivi de l identificateur et sys est vu comme l identificateur pr
189. ase de compilation le fichier n est plus consid r comme ayant t compil La compilation du fichier f s effectue suivant le m me mode que celui pilot par le pr dicat de compilation de niveau sup rieur insert reinsert insertz Ceci est une directive de compilation et non pas un pr dicat c est dire qu elle peut figurer au milieu d un source que l on compile mais ne peut se trouver dans une queue de r gle fasserta t fassertz t Ajouter un fait non compil Ajoute un fait non compil en d but fasserta ou en fin fassertz de son paquet L assertion est extr mement rapide et permet de g rer de tr s grosses bases de faits De plus les indexations install es sur ces faits par un appel pr alable obligatoire la primitive init fassert permettent un acc s tr s performant Le terme doit avoir la forme d une t te de r gle c est dire un n uplet dont le premier l ment est un identificateur Pour un m me paquet on ne peut m langer des r gles compil es assert insert et des faits non compil s fassert Exemple gt fasserta myrule 1 2 3 4 nil lt 44 abc gt 6 1 2 2e0 nil ProloglA R 3 24 Manuel de R f rence freplace t n_arg tl Remplacer un argument non index dans un fait non compil Remplace dans les faits cr s pr alablement par fasserta ou fassertz s unifiant avec f l argument de rang n_arg par le terme t1 Cet argument ne doit pas intervenir dans une combinai
190. au moins une solution De la m me mani re la r gle eg introduit les quations eq x x gt Les r gles suivantes ne sont pas exactement des r gles pr d finies mais tout se comporte comme si elles existaient Elles sont utilis es pour transformer une liste de buts en un seul but p4 Pq nil gt 1 9 La syntaxe compl te de Prolog II Nous rassemblons ici la syntaxe compl te de Prolog II ainsi qu un certain nombre d exemples et de remarques additionnelles Les notations utilis es sont celles de la commission de normalisation de Prolog voir le premier paragraphe de ce chapitre PrologIA 7 Prolog LIE PIT AZT AEN AGE El ments de base R1 21 1 9 1 Le niveau syntaxique program directive 7 directiveE 7 rule ruleE term termE termlist expr expr expr expr expro pterm pterm pterm pterm pterm pterm pterm pterm listexpr listexpr rule directive gt t pterm A gett EXPT 199 Mn term A pterm ie u term EXPT 999 gt L term XPl i200 gt EXPT 999 5 5 EXPTo90 prefix_Opyq EXPra expr postfix_op g expr infix_Op gq CXPTa eXpry 1 5 pterm identifier variable termlist identifier variable term me termlist LA lt gt A termlist Na ie J ug termlist nyn S listexpr UE EL constant
191. besoin 1 La visualisation est une repr sentation externe Prolog et donc n cessairement cod e par le syst me h te Prolog lui ne manipule que des donn es donc des codes ISO Ce sont les entr es sorties qui font la transformation entre la repr sentation graphique et le codage interne ProloglA J Prolog LIE RYT AIEEE CI LAGE Prolog et les caract res E 3 En d finitive il suffira de disposer de proc dures de transformation des chaines entre le codage ISO et le codage h te et de savoir quel type de codage est suppos dans les proc dures de communication de Prolog E 3 Jeu h te avantages et inconv nients Le choix du jeu de la machine h te a l avantage de simplifier le passage de la repr sentation des cha nes dans le langage h te au codage des cha nes en Prolog II il n est pas n cessaire de transformer les donn es entre Prolog et l ext rieur L inconv nient de ce choix tient la pauvret du jeu ASCII et la non standardisation des caract res tendus sur l ensemble des machines ce qui rend les programmes non portables E 4 Remarques En utilisant le m me codage que celui de la machine h te la donn e et sa repr sentation sont confondues tandis qu en utilisant le codage ISO il arrive que la donn e et sa repr sention soient diff rentes et que la repr sentation externe occupe plus d octets en m moire que la donn e eLa premi re moiti de la table du code ISO est identique
192. ble globale ult rieurement accessible pendant l effacement de n importe quel but et statique r sistante au backtracking Chaque l ment du tableau est initialis avec l entier 0 Les valeurs l gales de l indice sont incluses dans 1 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 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 voir ci dessus val pour l acc s et assign pour l affectation Le tableau est d sallou lorsqu on tue le module auquel il appartient c a d les r gles ayant le m me pr fixe ou bien lorsqu on ex cute le pr dicat k l _ array gestion d une pile inc i gt val i 1 x assign i x dec i gt val i 1 x assign i x initialise gt assign pointeur 0 def_array pile 100 empile v gt inc pointeur val inf pointeur 100 1 I val pointeur p assign pile p v empile v gt outm1 d bordement de la pile fail PrologIA 7 Prolog JTAG Prolog INT RITA LI LITE Op rations pr d finies sur les donn es R4 9 depile v gt val eql pointeur 0 0 I val pile pointeur v dec pointeur depile v gt outm pile vide line fail gt initialise Fi gt empile 12345 gt empile 23456 gt depile x depile y x 23456 y 12345 gt depile x
193. c les coordonn es effectives du coin inf rieur droit de l objet apr s cr ation b peut tre nil sys get_event ou un identificateur de r gle Dans ce dernier cas a chaque activation de la barre de d filement le but b o est lanc l est une liste d options ventuellement vide nil form e partir des identificateurs vscroll si la barre doit tre verticale chscroll si la barre doit tre horizontale top_attach left_attach right_attach bottom_attach ProloglA fe A Prolog TA NAT LITE a Prolog TAGE Primitives graphiques U5 17 L orientation par d faut est d termin e par les coordonn es sachant qu une barre est plus longue que large 5 3 2 Configuration d objets s get_attribute o a v Permet de se renseigner sur l tat des objets ou leurs propri t s o est l identification de l objet a est l identification de l attribut v sera unifi avec la valeur de l attribut interrog Les attributs possibles sont les m mes que ceux de la primitive set_attribute except les attributs focus et customColor compl t s des attributs suivants qui sont des propri t s de cr ation non modifiables parent v est unifi avec l identification du parent de l objet o type v est unifi avec un identificateur repr sentant le type de l objet o Les valeurs possibles sont graphics tty edit framepanel label push button check button radio_button scrollbar edit field popup
194. c utilisable la fois tutorial c tutorial mak tutorial p2 gt tutorial dll Exemple didactique minimal d crivant les r gles essentielles respecter userfunc c userfunc mak userfunc p2 gt userfunc dll Exemple cons quent fournissant diverses r gles qui exploitent la plupart des primitives de communication userxtrn c userxtrn mak userxtrn p2 gt userxtrn dll Exemple connectant lui m me une seconde DLL 16 bits et faisant appel a l API Windows II s agit de la transposition en 16 bits de l exemple des objets externes tel que fourni en 32 bits Les sources de la DLL charg e sont regroup s dans un sous r pertoire ProloglA Z Dro G LIE RITA YE LES YAO 7 Prolog LIE PIT AZT AEN AGE Guide d installation sous l environnement Windows U1 7 1 2 5 Fichiers d exemples Les exemples se trouvent dans le sous r pertoire examples du Kit Prolog Exemples de programmation en prolog comment s en Annexe automat p2 sur les arbres infinis database p2 sur l valuation d une formule deriv p2 sur la d rivation formelle grammar p2 sur les grammaires menu p2 la composition d un menu money p2 un casse t te mutant p2 les mutants path p2 la construction d un chemin Autres exemples D autres exemples concernant l environnement graphique sont donn s ainsi que des exemp les d ajout de pr dicats externes auto document s 1 2 6 Conventions pour les suffixes des fichiers Pour les fichiers
195. clause R 10 5 clear events U5 21 clear input R 5 8 clear menubar U 5 21 clear window U 5 10 click U 5 20 click_down U 5 20 click up U 5 20 close R 10 13 close_context_dictionary R 3 12 close input R 5 8 close output R 5 13 code R 6 25 26 command menu U 5 24 compound R 10 6 conc list string R 4 11 conc_string R 4 10 ConnectDescriptors R 8 10 ConnectInString R 8 10 ConnectOutString R 8 10 console R 5 1 ProloglA Prolog INT RITA LI LITE consult R 10 5 copy_term R 4 11 copy_term with constraints R 4 11 cosR4 6 coupure R 2 2 cpu_time R 6 4 create window U 5 9 cross U 5 17 current context R 3 12 current file R 5 2 current input R 10 15 current op R 10 3 current output R 10 17 current predicate R 3 22 current prolog flag R 10 20 cursor U 5 17 customColor U 5 18 customiz dll U 1 3 customiz dll U 3 2 customiz dl_ U 1 3 customiz dl U 3 3 C FUNCTION R 7 18 23 C_ FUNCTION BACKTRACK R 7 18 23 C_ FUNCTION BACKTRACK PROTECTE DR7 18 23 C_ FUNCTION PROTECTED R 7 18 23 date R 6 4 date_string R 6 4 date_stringF R 6 4 dbgbase mo R 2 6 dbgbase mo U 1 4 dbgedin mo R 2 6 dbgedin mo U 1 4 dbggraph mo R 2 6 dbggraph mo U 1 4 dde mo U 1 3 ddeAcceptClient U 4 12 Index Prolog II Windows ddeCbClientRequest U 4 13 ddeCbClientWantsServer U 4 12 ddeCbServe
196. courante qui peut tre une fen tre de type GRAPHICS ou une drawing area gr_color3 r v b D finit la couleur du crayon de l unit graphique courante en composantes r rouge v vert b bleu Si les valeurs sont r elles elles correspondent a des pourcentages d intensit pour chaque composante elles doivent tre comprises entre 0e0 et 1e0 et sont portables d une machine l autre Si les valeurs sont enti res elles doivent tre comprises entre 0 et 65535 Cette couleur est m moris e comme la customColor de l unit graphique courante or color dc D finit la couleur du fond si d 0 ou du crayon si d 1 de l unit graphique courante L argument c est un entier repr sentant une des 8 couleurs possibles parmi les valeurs 33 noir 30 blanc 205 rouge 341 vert 409 bleu 273 cyan 137 magenta 69 jaune s gr_colori d c D finit la couleur du fond si d 0 ou du crayon si d 1 de l unit graphique courante L argument c repr sente une couleur selon les m mes conventions que celles de la primitive gr color2 gr_color2 f c D finit la couleur f du fond et c du crayon de l unit graphique courante Les arguments fet c sont des entiers ou des identificateurs repr sentant une des couleurs possibles parmi les valeurs couleur 0 white blanc 1 red rouge ProloglA U5 26 Manuel d Utilisation Windows 2 green vert 3 blue bleu 4 pink rose 5 orange orange 6 brown marron 7 mage
197. ction d une librairie dont on n a pas la ma trise des sources En effet pour ce type de fonction la transformation des donn es Prolog C et C Prolog se fera en Prolog par l interm diaire de la r gle pr d finie callC Cette m thode permet donc de communiquer des types de donn es communs aux deux langages savoir des entiers des r els des cha nes de caract res et des tableaux homog nes de ces types La d claration d une fonction externe appel direct se fait par la d claration d un descripteur dont le champ type vaut DIRECT C FUNCTION ProloglA R 7 26 Manuel de r f rence DIRECT _C FUNCTION La d claration d un objet de ce type permet de cr er automatiquement une r gle relais Prolog de nom name et d arit size qui ne peut tre effac e qu travers la primitive callC et dont l ex cution consiste appeler la fonction C point e par le champ adresse du descripteur Cette fonction C ne doit pas avoir plus de 20 arguments Si le champ size du descripteur vaut 1 le type et le nombre d arguments sont variables suivant l appel Il est possible d appeler sprintf par exemple voir 5 2 de ce manuel 7 7 1 Primitive CallC La primitive pr d finie callC d termine au moment de l appel le mode de passage des arguments la fonction C leur type et le type de la valeur de retour d apr s les arguments effectifs du pr dicat Prolog et conform ment aux conventions adopt es que nous d crirons
198. ctures de tableaux eee R7 10 7 3 2 1 Description du codage d un terme R7 11 7 3 2 2 MAGIC ALEUTS ay 2 5 nn nee ne R7 14 7 3 2 3 Description des fonctions de communicationR 7 16 7 4 Principe de la m thode des descripteurs R7 17 7 4 1 El ments d SCHIDOIES aan sentis R7 17 7 4 2 D claration SATIQUE then cherie as ne R7 18 7 4 3 D claration dynamique tennis R7 19 T S Donn es DAAB OS nimes naar antenne EEOAE SEA R 7 20 7 5 1 Exemple de zone commune de donn es R 7 22 7 6 Ajout de fonctions externes R 7 22 7 6 1 Exemple de d claration de r gle pr d finie R 7 24 7 1 Ajout de fonctions externes appel direct R7 26 Tes Primitive CAE SA Na Lt a R 7 26 7 7 2 Conventions Prolog pour la communication 0 ceeeee des donn es jens inate rakes te caren etna aes R7 27 7 7 2 1 Convention pour des param tres sans Valeur de fetour Eu en sn R7 28 7 7 2 2 Convention pour le retour de la fonction R 7 29 ProloglA fs 7 Prolog LIE RITA SEE TOME YAO 7 Prolog LIE PIT AZT AEN AGE G n ralit s 7 7 2 3 Convention pour des param tres avec 0 ceseeeeeeeees MA lOUr de F IOU nee ee Re ee R7 29 7 1 3 Exemple m thode simple pour appeler une eeeee POTCTION O PEE E TAT R7 32 8 Lancement d un but Prolog par un programme R8 1 Be ld Principes d DA
199. d est le MicroSoft Visual C version 2 xx Tout autre SDK compatible est utilisable ProloglA U1 2 Manuel d Utilisation Windows 1 1 3 Pour ajouter des extensions en code 16 bits Cette m thode est destin e aux utilisateurs de Windows 3 la DLL d extension n tant pas reconnue par Windows NT et Windows 95 Seule la m thode des parasites d crite en annexe est disponible ici le code d extension prenant place dans une DLL charg e automatiquement par Prolog Pour construire cette DLL une librairie statique qui inclut les fonctions de communication get_ integer est fournie Elle est compil e avec le CL version 8 00 du MicroSoft Visual C version 1 Tout autre SDK compatible est utilisable Cette DLL a acc s l ensemble de l API 16 bits de Windows 1 1 4 Pour cr er des applications et les diffuser Pour cr er des applications et les diffuser il vous faut commander le kit suivant Run Time Prolog II sous Windows Pour Windows 3 vous devrez aussi redistribuer le kit Win32s 1 2 Contenu du kit d installation Note concernant Windows 3 Dans le cas de Windows 3 la premi re chose faire est d installer le kit Win32s fourni Il est dot de sa proc dure d installation autonome et devra tre redistribu tel quel vos propres clients utilisant Windows 3 Le jeu FreeCall fourni avec ce kit vous permettra de v rifier son bon fonctionnement Le kit d installation de Prolog II sous Windows consis
200. d clarer par les descripteurs C_FUNCTION PROTECTED et C_ FUNCTION BACKTRACK PROTECTED Ces types identifient les m mes objets que les types C_FUNCTION et C_ FUNCTION_BACKTRACK seulement leur visibilit change En effet les objets de type PROTECTED seront cach s pour le mode de mise au point C_FUNCTION La d claration d un objet de ce type permet de cr er automatiquement une r gle relais Prolog de nom name et d arit size L ex cution de cette r gle Prolog se fera par l appel de la fonction C dont l adresse se trouve dans le champ adresse Les arguments de la r gle peuvent tre acc d s depuis la fonction C par les proc dures standard de communication de donn es get et put La fonction C point e par adresse doit tre d clar e de type int et est appel e par Prolog sans param tres Elle doit retourner la condition de terminaison 1 pour ECHEC 0 pour SUCCES gt 0 pour ERREUR Permet de construire des r gles pr d finies externes plus simplement que par l utilisation directe des parasites n et de la proc dure relais user rule cf Annexe D ProloglA 7 Prolog LIE PIT AZT AEN AGE Extensions avec des langages externes R 7 23 C_ FUNCTION _ BACKTRACK La d claration d un objet de ce type permet de cr er automatiquement une r gle relais Prolog de nom name et d arit size L ex cution de cette r gle Prolog se fera par l appel de la fonction C dont l adresse se trouve dans le champ adr
201. d s Permet d ex cuter une commande du syst me d exploitation repr sent e par la cha ne s Quand la commande appel e provoque une erreur sys _ command g n re une erreur ERREUR SYSTEME avec en compl ment d erreur le status retourn par le syst me d exploitation Sous certains syst mes d exploitation UNIX par exemple ce pr dicat peut tre grand consommateur de m moire On pourra alors le red finir l aide d un coprocessus sur ces syst mes voir le chapitre sur les coprocessus getenv s x Unifie x avec la cha ne repr sentant la valeur de la variable syst me d environnement dont le nom est d fini dans la chaine s Si la variable n est pas d finie x est unifi avec une chaine vide set_import_dir s D finit un r pertoire de r f rence qui est consult apr s le r pertoire courant quand les fichiers n y ont pas t trouv s par les primitives qui manipulent des fichiers en lecture telles que input insert load La cha ne de caract re s concat n e un nom de fichier doit d finir un nom complet compr hensible par le syst me d exploitation lkload s1 s2 Cette primitive n est disponible que sous certains syst mes d exploitation voir le manuel d utilisation Lorsqu elle est pr sente elle permet d effectuer un lien et un chargement dynamiques de programmes externes ms _err n s Unifie s avec le texte de l erreur num ro n Pour cela Prolog fait une recherche dans le fichier d erreurs err fx
202. d simplement la r gle eq x x gt fail R gle pr d finie provoquant toujours un chec backtracking findall x p l Unifie avec la liste de toutes les solutions x lorsqu on efface p free x S efface uniquement si x n est pas li list_of x y p Fournit la liste tri e sans r p tition de tous les individus qui satisfont une certaine propri t x est une variable y est une liste de variables p est un terme Prolog contenant au moins toutes ces variables Pour chaque ensemble de valeurs de y unifie avec la liste des valeurs de x pour que p soit vraie c est dire pour que p s efface L ordre de la liste est identique celui d fini sur les termes cf term_cmp 3 Exemple Prolog contenant la base de r gles suivante homme grand michel 184 gt homme grand alain 183 gt homme grand henry 192 gt homme petit nicolas 175 gt homme petit julien 176 gt homme petit gilles 120 gt gt list of x t nil hommel t x h 1 t grand l alain henry michel nil t petit l gilles julien nicolas nil ProloglA A la Y TAGE J ere f zelig Le contr le de l effacement des buts R2 9 not X Est d crit par les r gles not X X fail not X repeat Est d crit par les r gles repeat gt repeat gt repeat setof x p l Pour chaque instantiation diff rente de l ensemble des variables libres du but
203. dans l ordre d apparition M entier Temps de r ponse maximal accept en millisecondes pour un change DDE avant de signaler une erreur o file output D finit le nom du fichier sur lequel est dirig e l unit de sortie courante d s le d marrage Par d faut l criture se fait dans la console La banni re de Prolog apparait toujours dans la console P parameter Permet de passer un param tre sur la ligne de commande Ce param tre est r cup rable depuis Prolog dans le tableau pr d fini de cha nes de caract res tab_user_param Si une cha ne vide est rendue c est qu il n y a plus de param tres r cup rer Au maximum 20 param tres peuvent tre transmis sur la ligne de commande Exemple prolog P 1 P foo gt val tab_user_param 1 V v myn gt val tab user param 2 V v foo gt val tab_user param 3 V v q entier D finit la taille en Ko r serv e pour le codage des arguments des appels directs de proc dures C ProloglA Prolog U2 10 Manuel d Utilisation Windows HERITAGE Q Permet le d marrage de Prolog l tat iconique Quiet r file D finit le nom du fichier d erreurs utilis par Prolog d faut err txt Pour avoir les messages d erreur en fran ais choisir le fichier fr_err txt R entier Realloc D finit le pourcentage d augmentation de taille pour la r allocation automatique d faut 25 s entier stack D finit la tai
204. de fichiers contenant du texte quelconque Les fichiers livr s dont les noms se terminent par p2 contiennent les textes sources des programmes donn s en exemple en Annexe 1 3 Proc dure d installation Le volume de distribution de Prolog II a t confectionn par compression d une arborescence Ex cuter la commande de chargement indiqu e sur la feuille de description accompagnant le kit de distribution apr s s tre plac dans le r pertoire o l on d sire installer les fichiers Il est conseill de cr er un r pertoire r serv Prolog par exemple c prolog dans lequel seront install s les fichiers du kit Il faut alors d finir la variable d environ nement qui est utilis e par Prolog pour acc der ces fichiers voir 1 4 1 4 Modification de l environnement d ex cution Pour une meilleure utilisation de Prolog les variables suivantes doivent tre d finies dans votre environnement d ex cution PrologDir2 Chemin utilis par Prolog si les fichiers suivants ne sont pas d finis dans le r pertoire courant initial po edinburg mo err txt La variable concat n e au nom du fichier doit donner son chemin complet PrologEdit Nom de votre fichier de commande qui lancera l diteur de textes devant tre utilis par Prolog pr dicats edit editm lors de l dition avec un diteur de la machine h te La commande suivante doit pouvoir tre comprise par l interpr teur de commandes PrologEdit n
205. de nom s2 save_window s1 quivaut save window s1 s1 set_window s b Permet de modifier les attributs ou la visibilit d une fen tre s est l identification de la fen tre b peut tre soit un bool en il indique alors si la fen tre sera visible 0 invisible 1 visible soit un attribut voir new_window Les attributs possibles sont pour les fen tres graphiques et modales lt SAVE v gt o v est un bool en ProloglA U5 12 Manuel d Utilisation Windows Ce pr dicat avec cet attribut peut aussi tre employ pour une drawing area s est alors son identification Si v 1 un bitmap de rafra chissement de la taille de l objet est cr lt SAVE r gt o r est un rectangle Pour une fen tre de texte lt FONT n gt lt FONTSIZE n gt Exemple gt set_window console lt FONTSIZE 12 gt set_window s b x1 y1 x2 y2 Permet de modifier la visibilit les dimensions et l emplacement des fen tres existantes S est l identification cha ne de caract res ou entier de la fen tre notamment console graphic trace pour les fen tres pr d finies b est un bool en indique si la fen tre sera visible 0 invisible 1 visible xl yl sont les nouvelles coordonn es par rapport l cran du coin int rieur sup rieur gauche de la fen tre x2 y2 sont les nouvelles coordonn es du coin int rieur inf rieur droit de la fen tre l origine tant situ e au coin su
206. de red finir la fonction de lecture dans la console par la d claration d une fonction d entr e de texte pf1S laquelle Prolog soumettra toutes les entr es pr dicats Le remplacement et la suppression de cette fonction fonctionnent comme la pr c dente Cette routine retourne la foncion qui tait install e avant son appel Le format de la fonction de lecture est impos son premier argument est l adresse d un buffer pr t recevoir le texte donc allou son second argument est la capacit maximale de ce buffer Le code de retour de la fonction est ignor en cas d erreur elle doit rendre une cha ne vide dans le buffer Int rieurement la fonction peut effectuer toute op ration m me bloquante en traitant les v nements n cessaire pour obtenir le texte retourner ConnectOutString OutStringFunction pfOS Cette routine permet de red finir la fonction d criture dans la console par la d claration d une fonction de sortie de texte pfOS laquelle Prolog soumettra toutes les sorties pr dicats messages Le remplacement et la suppression de cette fonction fonctionnent comme la pr c dente Cette routine retourne la foncion qui tait install e avant son appel Le format de la fonction d criture est impos son unique argument est l adresse d un buffer contenant le texte imprimer Le code de retour de la fonction est ignor aucune erreur n est attendue Int rieurement la fonction peut effectuer t
207. de signes contraires En effet dans ce cas le second op rande t2 est ajout au reste de la division enti re de par f2 remainder Les valeurs de f et 2 doivent tre de type entier rem t t2 ou t rem 12 valeur rem f 12 reste de la division enti re de par 12 Les valeurs de f et 2 doivent tre de type entier eql f1 2 o t 12 ou 41 12 valeur eg f1 t2 si valeur f1 valeur 2 alors 1 sinon 0 Si f et 2 sont de type arithm tique la conversion automatique des types est appliqu e avant l valuation t D out 5 2 valeur 1 t2 si valeur valeur f2 alors 1 sinon 0 Si f et 2 sont de type arithm tique la conversion automatique des types est appliqu e avant l valuation inf t1 2 ou t lt 12 valeur inf f1 2 si valeur t lt valeur t2 alors 1 sinon 0 Pour les entiers et les r els on prend la relation lt entre les nombres Pour les cha nes on prend l ordre alphab tique et pour les identificateurs on prend l ordre alphab tique sur les cha nes associ es ProloglA GS PTS H J Prolog TACE AGE Op rations pr d finies sur les donn es R4 5 infe t1 2 ou t lt 12 valeur infe t 12 si valeur t1 lt valeur 2 alors 1 sinon 0 Cf inf sup t1 2 ou t1 gt 12 valeur sup t t2 si valeur f1 gt valeur 72 alors 1 sinon 0 Cf inf supe t1 t2 ou t gt 12 valeur supe t t2 si valeur f1 vale
208. de sorte que x y repr sentent les coordonn es du coin int rieur haut et gauche de l unit graphique courante L aspect de l unit n est pas modifi s gr_getorigin x y Renseigne sur les coordonn es du coin int rieur sup rieur gauche de l unit graphique courante install es par gr_setorigin gr_penloc x y Donne en coordonn es enti res la position du crayon dans l unit graphique courante gr_penlocr x y Identique gr_penloc x y mais donne un r sultat de type r el gr_erase Efface le contenu de l unit graphique courante repositionne le crayon en haut et gauche et supprime tous les v nements li s la fen tre et ses objets gr_move x y Modifie la position du crayon de x pixels dans le sens horizontal et y pixels dans le sens vertical par rapport a la position courante gr_moveto x y Positionne le point d criture crayon de l unit graphique courante enx y gr_line x y Tire un trait depuis la position courante jusqu la nouvelle position du crayon d plac horizontalement de x pixels et verticalement de y pixels gr_lineto x y Tire un trait depuis la position courante jusqu au point x y en d pla ant le crayon gr_rect n r gr_rect n xi y1 x2 y2 Permettent d appeler les routines basiques de dessin inscrit dans un rectangle r est l arbre d signant le rectangle x y sont les coordonn es du coin sup rieur gauche et x2 y2 celles du coin inf rieur droit du rectangle Prol
209. dentificateur X1 XD Se Xn Figure 1 3 Bien entendu cette simplification pr suppose que n ne soit pas nul Les deux derniers arbres peuvent alors tre repr sent s sous la forme classique de PrologIA 7 Prolog LIE PIT AZT AEN AGE El ments de base R1 11 plus ou fois fois Weil et fe FAX Et 5 8 5 8 a et a ou p f X tan et Jo a et fee OX ou pn AN em et ho a et Fe ou p io Figure 1 4 La notion d arbre infini est suffisamment inhabituelle pour que nous nous tendions un peu dessus Intuitivement un arbre est infini s il poss de une branche infinie Nous nous int resserons plus sp cialement la fraction des arbres infinis qui ensemble avec les arbres finis forme les arbres dits rationnels c est dire les arbres qui ont un nombre fini de sous arbres Si nous reprenons les deux derniers exemples d arbres l ensemble de leurs sous arbres est d crit dans la figure 1 5 ProloglA Poole R1 12 Manuel de R f rence HERIT lt gt i lt gt plus fois 5 8 Oe ol fl fois 5 8 plus lt gt lt gt ZA AAN fois 5 8 fois 5 8 Daon Ry CSS ann ou et a b c de Mex Fe AE AVTA ou c lt gt et a lt gt t lt gt b a PO hile be MX et a lt gt et lt gt b ou c lt gt A A Del ON SS et lt gt b ou c lt gt et a lt gt 2 ME Be NX PL TA ou Cc lt gt et Wal ere et lt gt
210. dentique gr_click b x y mais donne en plus l tat des principales touches de modification en unifiant m avec la somme des valeurs 1 La touche MAJ USC ULE est appuy e 2 La touche CONTROLE est appuy e 4 Une touche option est appuy e OPTION sur Mac 8 La touche COMMANDE est appuy e 16 La touche MAJ USC ULES VERRO UILLEES est enfonc e 32 Ils agit d un DO UBLE CLIC 2 R 8 A On a donc m 0 si aucune touche modificatrice n est appuy e pendant le clic gr_clickr b x y Identique gr_click b x y mais x et y sont de type r el 1 Cette touche est absente sur le clavier du Macintosh PrologIA Prolog U 5 34 Manuel d Utilisation Windows HERITAGE s gr_sensitive xl y1 x2 y2 p D finit le rectangle de coordonn es x y x2 y2 dans l unit graphique courante f comme zone sensible aux v nements clic laquelle est attach le pr dicat p Si p est un identificateur diff rent de nil et get_event chaque clic l int rieur du rectangle le but p f sera lanc Par d faut toutes les zones sont d finies avec get_event et donc tous les clics dans l unit sont envoy s dans la queue d v nements de Prolog gr sensitive x y x y nil permet d ignorer les clics dans la zone d finie Les diff rents rectangles d finis doivent tre disjoints Dans le cas contraire pour un clic dans la partie commune le comportement n est pas garanti C est une des zones qui le capte mais on ne sait pas laquelle gr_ge
211. deux cons quences tr s importantes de la modification de paquets de r gles qui vont influer sur le comportement du programme l ex cution 1 La modification ajout ou suppression de r gle s d un paquet de r gles compil es supprime son indexation Pour l indexer nouveau utiliser la primitive index 2 La modification d un paquet de r gles en cours d ex cution d une de ses r gles choix encore en attente entra ne un comportement d ex cution pour le backtracking ou pour un prochain appel extr mement d pendant de la configuration des r gles d pendant de la structure du paquet de la r gle courante de la r gle modifi e Dans la mesure du possible il est pr f rable d puiser les choix avant de modifier les r gles ou si ce n est pas le cas de supprimer l indexation avant l ex cution et la modification des r gles compil es Toujours par souci d am liorer les performances il a t introduit dans Prolog II un nouveau type de r gles appel es faits non compil s Ceci dans le but d optimiser les probl mes de gestion d informations par manipulation dynamique de faits En effet pour v rifier un fait il est inutile d optimiser l ex cution du corps de la r gle puisqu il est inexistant par contre il est important d am liorer les acc s aux arguments Prolog II va installer pour les faits non compil s un processus d indexation partir de tous les arguments du fait pour permettre au moment de
212. deuxi me consiste unifier i et k 1 etc la derni re consiste unifier i et k2 Exemple La deuxi me forme enum i k quivaut enum i 1 k gensymbol i Cr e un nouvel identificateur de la forme idn o n est un entier et l unifie avec i list_string l s Compose une chaine s a partir d une liste de caract res Exemple gt list string H e i 1 z o nil x x Hello list _tuple l t Compose un n uplet partir de la liste d arguments Exemple gt list tuple 111 aaa 222 Hello nil x x lt 111 aaa 222 Hello gt member x l Unifie successivement x avec chaque l ment de la liste Est d crit par les r gles member x x l gt member x _ l gt member x 1l setarg n t1 t2 Remplace l l ment de rang n du terme par le terme 2 doit tre une liste ou bien un n uplet Le terme initial est restaur sur un backtracking Exemple gt reinsert newarg 55 gt newarg 66 gt gt eq x 1 2 3 nil newarg y arg2 2 x el setarg 2 x y arg2 2 x e2 x 1 55 3 nil y 55 el 2 e2 55 x 1 66 3 nil y 66 el 2 e2 66 ProloglA SI S ITT J Prolog RIT A VE Op rations pr d finies sur les donn es R4 13 split t l D compose une chaine ou un n uplet en la liste de ses composants Au moment de l effacement de split f 1 t doit tre connu on a alors Sirest une cha ne est unifi avec la liste de ses ca
213. diquons pas sauf dans le cas d une ligne vide not e RC gt dictionary DICTIONARY CONTENT OF balanced meal 3 calories 2 dessert 1 fish 1 hors_d_oeuvre 1 main course 1 meal 3 meat 1 smaller 2 sumof 4 value 4 gt debug dif d Sorbet aux poires balanced meal Truffes sous le sel p d CALL dif v254 Sorbet aux poires DBG RC CALL balanced_meal Truffes sous le sel v623 v743 On ajoute la configuration par d faut l impression apr s unification et une indentation DBG P1 DBG i5 On v rifie l tat des options DBG S Print after unification Print before unification Print mode out depth 4 Errors are printed Indentation 5 On poursuit DBG RC CALL meal Truffes sous le sel v623 v743 C est un pr dicat important on y met un point d arr t fixe et on v rifie les points d arr t fixes actifs DBG meal 3 DBG b meal 3 On poursuit DBG RC meal Truffes sous le sel v623 v743 CALL hors d oeuvre Truffes sous le sel DBG RC hors d oeuvre Truffes sous le sel CALL main course v623 C est un pr dicat important on y met un point d arr t fixe et on v rifie les points d arr t fixes actifs DBG main course 1 DBG b main course 1 ProloglA J Prolog R 6 22 Manuel de R f rence HERITAGE meal 3 On poursuit DBG RC ain_course v623 ALL meat v623 BG RC at Grillade de boeuf v743 TD Q 3 Q 3 Deo p QE Le Q nao
214. ditf n i editf n i s D crit une zone d une ligne de texte ditable de nom i o est un identificateur s repr sente la valeur initiale de la zone d dition Cette valeur initiale est la chaine vide si elle n est sp cifi e ni en argument ni dans la liste n est un entier repr sentant le nombre minimum de caract res de la zone Si s est plus grand la zone est dynamiquement expans e button s i D crit un bouton avec le label s auquel est associ l action i Lorsque le bouton est press une action est r alis e Siiest fail le dialogue est termin et gr_dialog choue Siiest nil rien n est fait Sinon le but i est activ tant la liste des paires nom valeur des zones du dialogue au moment o le bouton est cliqu Lorsque le but i a t ex cut la gestion du dialogue reprend en l tat Pour arr ter le dialogue en cours l utilisateur peut programmer dans i un block _exit lt fail L gt qui provoquera un backtracking de gr dialog ou un block exit lt nil L gt qui conduira une terminaison normale 2 tant construite partir de la liste des couples nom valeur indiqu e par L 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 i 2 avec la liste des items don
215. du gestionnaire Ce triplet doit alors avoir la forme lt ListeValeurs ListeDesNoSelectionn s NoEnHaut gt Le premier argument est une liste quelconque de constantes chaines identificateurs nombres 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 En sortie donc dans 2 le r sultat est donn sous la forme habituelle d un couple identificateur listeDesltemsS lectionn s Tandis que dans la repr sentation interne l tat du gestionnaire est d sign par le triplet d crit ci dessus C est sous cette forme que doit tre manipul e la valeur de la glist dans les programmes li s aux boutons C est dire c est le couple identificateur lt Liste Valeurs ListeDesNoSelectionn s NoEnHaut gt qui doit appara tre dans les listes manipul es par ces programmes 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 ProloglA J Prolog TOA NATE tr t E 7 Prolog LIE PIT AZT AEN AGE Primitives graphiques US5 45 col l oul D crit une colonne align e gauche dont le contenu est d crit par Si est une s quence la primitive calcule la ta
216. du m me programme conc que ci dessus assert conc nil y y nil assert conc e x y e z conc x y z nil Ne permettent pas d ajouter des r gles qui contiennent des arbres infinis cependant cela peut tre fait avec la r gle pr d finie equations Voir 2 3 assertn t q n Compiler et ajouter une r gle la n i me position dans le paquet M me fonctionnement que assert mais l ajout se fait la n i me position dans le paquet correspondant t Exemple assert myrule 2 nil assertn myrule 0 nil 1 assertn myrule 1 nil 2 tap es dans cet ordre ont pour effet l ajout du programme myrule 0 gt myrule 1 gt myrule 2 gt Ne permet pas d ajouter des r gles qui contiennent des arbres infinis cependant cela peut tre fait avec la r gle pr d finie equations Voir 2 3 current _predicate i a 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 a Si a est une variable et i est connu num re successivement toutes les valeurs de a 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 i et a ne doivent pas tre libre en m me temps ProloglA 7 Prolog LIE PIT AZT AEN AGE Structuration et modification des r gles R3 23 discontiguous i a
217. dules Il faut ensuite recompiler le s module s et faire l dition de liens entre celui ceux ci et la biblioth que Prolog pour construire le fichier prolog exe Ceci est r alis par le programme prolink bat ProloglA U2 12 Manuel d Utilisation Windows prolink bat Le programme prolink bat permet de recr er un ex cutable de Prolog modifi ou augment d un certain nombre de modules pouvant contenir des descripteurs de donn es externes La commande prolink est de la forme prolink liste modules objets liste descripteurs liste_modules_objets est une suite de noms s par s par des blancs de modules objets compil s auparavant devant tre inclus dans l ex cutable final liste descripteurs est une suite de noms s par s par des blancs de tables de descripteurs voir le chapitre 7 du manuel de r f rence se trouvant dans les modules objets indiqu s en premier argument Si l on n a pas cr de table de descripteurs le deuxi me argument peut tre supprim Attention ne pas oublier le caract re blanc de part et d autre du caract re s parateur ProloglA 7 Prolog WIA NAL JTAG Utilisation de Prolog I Windows U2 13 ProloglA HERITAGE Z J Prolog LE RYT AEE CIS LATE 3 Sp cificit s de Prolog II Windows 3 1 Valeurs extr mes des constantes arithm tiques 3 2 Les caract res dans la syntaxe Prolog II 3 3 Personnalisation d une Application 3 4 Modification
218. e 2 sur la ligne de commande Prolog I ProloglA Bulag R10 2 Manuel de R f rence ITAGE a si le fichier edinburg mo est charg par le pr dicat load ou reload b si le but edinburgh est tap La syntaxe exacte est d crite au chapitre 1 en utilisant la variante E des r gles syntaxiques Les principales diff rences avec la syntaxe Edinburgh d finie dans la norme ISO IEC sont d crites en annexe A Sur la ligne de commande ou dans une directive lorsque le premier terme rencontr est une liste celle ci est interpr t e comme une liste de fichiers consulter user est quivalent console 10 1 2 Les op rateurs En syntaxe Edinburgh les op rateurs suivants sont pr d finis lop rateur pr c dence type terme construit gt 1050 xfy sys gt T1 T2 700 xfx sys lt T1 T2 gt 700 xfx sys gt T1 T2 700 xfx sys T1 T2 sys T1 T2 sys T1 T2 sys T1 T2 xfx sys t1 t2 yfx sys t1 t2 V yfx sys V T1 T2 ProloglA 7 Prolog HERITAGE Extensions Edinburgh R10 3 op rateur pr c dence type terme construit 400 yfx sys t1 t2 400 yfx sys t1 t2 x lt lt 400 yfx sys lt lt T1 T2 FE 200 xfx sys t1 t2 current_op P M O Unifie respectivement les arguments P M et O avec la pr c dence le type de parenth sage et l op rateur Exemple current op 1200 M 0O M fx O M x O M x x O M xfx
219. e On remarquera que sur les assertions step et next ont le m me effet Les commandes de progression dans le code permettent de d finir quel doit tre le prochain arr t et quelles informations doivent tre obtenues entre temps En effet chaque progression on pourra choisir ou pas d afficher les informations sur l ex cution de la portion de programme Voir les commandes du debugger RC n N g t 6 6 2 3 Terminer l ex cution Ayant suffisamment d grossi une partie du programme il faut maintenant le terminer Il est possible de go to end continuer jusqu la fin du programme en imprimant toutes les informations en imprimant seulement celles concernant les points d arr t fixes en quittant le mode debug et continuant normalement abort interrompre le programme quit quitter Prolog Voir les commandes du debugger a e G T q 6 6 2 4 Affichage des informations Nous allons d crire maintenant quels moments se font les affichages et sous quelle forme PrologIA R6 10 Manuel de R f rence LIL IR 7 Prolog TAGE Quand Un Backtracking est g n r L information est affich e Elle indique que c est une alternative RECALL le num ro de la nouvelle r gle choisie et le but qu on essaie nouveau d effacer Le but r essayer fait partie des buts effacer il peut donc tre utilis comme point d arr t Par exemple sur l x cution gt plat Chapon farci CALL p
220. e insertz permettant de d finir un paquet de r gles en plusieurs morceaux c est dire mix avec d autres r gles des erreurs sur le nombre d arguments ou des confusions sur le nom de pr dicats tr s ressemblants ne seront pas visibles Lorsqu un module m est lu le contexte d fini par l en t te du module est m moris dans le module sous forme d une r gle m module_context A1 A2 A3 A4 o Al A2 A3 A4 ont les valeurs d finissant le contexte de lecture du module cette r gle est utilis e par les primitives d dition de module telles que editm insert f insertz f reinsert f Compiler des r gles partir d un fichier M me fonctionnement que le mode 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 Lorsqu un module m est lu le nom du fichier source du module est m moris dans le module sous forme d une r gle m module_file s o s est une cha ne repr sentant le nom du fichier cette r gle est utilis e par les primitives d dition de module telles que editm is _uncompiled i a Fait un succ s si les r gles de nom i et d arit a forment un paquet de faits non compil s choue sinon Liste toutes les r gles du module d termin par le pr fixe par d faut du contexte courant Lister un paquet de r gles Liste sur la sortie couran
221. e menu d sign par u Signification des arguments u unit Repr sente le menu concern 0 pour un menu de la barre de menu l identification d une fen tre pour le popup menu qui lui est associ ou encore l identification d un menu popup ou pulldown c chemin Liste de cha nes indiquant un chemin de s lection dans le menu u L item correspondant dans ce chemin est remplac par v Si une telle hi rarchie n existe pas elle est cr e Si la liste est nil c est tout le menu qui est concern Attention le titre d un pulldown menu n est pas un item ne pas le mentionner dans le chemin v valeur Arbre de description de la valeur rempla ant l item la position indiqu e par c dans le menu u Cette valeur peut tre une feuille ou une hi rarchie ProloglA Prolog HERITAGE Primitives graphiques U5 23 Valeur de type feuille Une feuille est repr sent e par lt Nom item Identificateur n gt La cha ne Nom item vient remplacer le texte de l item indiqu par le chemin Ou bien si la cha ne est vide l item d sign est supprim Un caract re amp dans la cha ne Nom Item n apparaitra pas dans le texte de l item et d signera le caract re qui le suit comme raccouci clavier pour activer l item Identificateur est l identificateur d acc s d une r gle d arit 1 attach e l item n est un bool en indiquant si l item est coch ou non Il est possible d utiliser pour v la place de ce triple
222. e R f rence HERITAGE nl C nl Est quivalent ine 0 pour l unit de sortie associ e au canal C put X Equivalent put_code 1 put_byte C X put_byte X L octet X entier gt 0 est envoy sur l unit de sortie associ e au canal C Cette unit doit tre de type binary put_char C X put_char X Le caract re X est envoy sur l unit de sortie associ e au canal C put_code C X put_code X Le code interne de caract re X est envoy sur l unit de sortie associ e au canal C set_output C Redirige la sortie courante vers l unit associ e au canal C tab N Envoie N blancs sur l unit courante de sortie tell F Est quivalent output F Si F est un identificateur c est la cha ne correspondant son abr viation qui est prise en compte comme nom d unit c d le pr fixe est ignor telling F Est quivalent output_is F Si F est un identificateur c est la cha ne correspondant son abr viation qui est prise en compte comme nom d unit c d le pr fixe est ignor told Est quivalent close output write C X write X Est quivalent write term avec les options quoted false numbervars true ignore ops false writeq C X writeq X Est quivalent write term avec les options quoted true numbervars true ignore _ops false write canonical C X write canonical X Est quivalent write term avec les options quoted true number
223. e d un change DDE En pratique le Topic rel ve le plus souvent d un Serveur pr cis et donc il existe entre Topic et Service un lien implicite par exemple qui sait diter la Feuille de Calcul Excel nomm e EXAMPLE XLS Mais rien n emp che un Serveur quelconque qui en a la comp tence d accepter un Topic donn Le nom d Item indique un objet donn e pr cis relatif une conversation ouverte sur un th me donn En pratique il s agit donc souvent d un paragraphe pr cis du document ouvert par exemple la plage E7 K9 de la feuille de calcul pr cit e Mais ce peut tre toute entit conceptuellement subordonn e au Topic compatible avec les op rations DDE effectuer sur elle par exemple un signal Reset acc d forc ment pour une op ration Poke dans une conversation de Topic Time ouverte avec CLOCK Ind pendamment de ces identifications un change DDE se caract rise par le choix d un format de donn e Celui ci public ou propri taire est n goci implicitement lors de l ouverture de la conversation le Client est suppos s tre enquis des formats support s par le Serveur pour le Topic vis et avoir choisi le plus riche que lui m me supporte ProloglA 7 Prolog LIE RITA EE LEP YAO J Prolog TD WT ASAE me mie a Communication avec une application en utilisant le protocole DDE U4 3 Client Logique Le Formalisme DDE EXT seulement pour Prolog actuellement
224. e de fichier ProloglA Proley R 6 16 Manuel de R f rence HERITAGE Par exemple l ex cution de repas e Poulet d provoque un chec Mettons au point gt repas e Poulet d CALL repas v156 Poulet v313 DBG CALL hors d oeuvre v156 DBG CALL plat Poulet DBG CALL viande Poulet DBG RECALL 2 plat Poulet DBG E pourquoi viande Poulet a chou on ouvre une session gt list viande 1 le prompt Prolog apparait viande Grillade de boeuf gt j viande Poulet au tilleul gt on consulte la base de r gles gt quit on termine la session Elapsed time 19s Goodbye DBG w on est de retour sous le debugger gt plat 1 rule number 2 on backtracking DBG g gt Voir les commandes du debugger s w E 6 6 2 6 Configuration Comme nous l avons d j vu pr c demment il est possible de d finir les comportements du debugger L ensemble des param tres de comportement est appel la configuration Certains param tres de la configuration peuvent tre pr cis s au lancement de l outil ils seront valides durant la session de mise au point c est dire tant qu on n a pas d sactiv l outil ou tant qu on ne l a pas r activ avec d autres param tres tant qu une commande ne les modifie pas Les comportements param trables sont l activation ou sous l interpr teur de commande du debugger la progression dans le code le moment d imp
225. e de programmes qui auraient un comportement incorrect si l on utilisait une d finition utilisant la coupure Par exemple la d finition de la relation x est l ment de la valeur v peut s crire l ment x nil false gt l ment x x l true gt l ment x y 1 v gt dif x y l ment x 1 v l ment x 1 2 nil v 1 v true 2 1 Il Ov v true gt x x x x 2 v false Si l on d finissait une telle relation en utilisant la primitive on introduirait de nombreux comportements anormaux l ment x nil false gt l ment x x 1 true gt l ment x y 1 v gt l ment x 1 Vv gt l ment x 1 2 nil v x 1 v true une seule solution gt l ment 2 4 2 3 nil false succ s ProloglA R2 8 Manuel de R f rence 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 12 Il faut remarquer que contrairement ce que l on pourrait penser premi re vue cette primitive ne peut pas tre r alis e avec Voyons sur un exemple une utilisation de cette r gle r pondre p gt default p outml personne homme jean gt homme pierre gt gt r pondre homme x x jean x pierre gt r pondre femme x personne eq t1 t2 Unification de et 2 correspon
226. e document suit le plan du manuel de r f rence en d crivant pour chaque rubrique les sp cificit s du mode Edinburgh Un certain nombre de r gles pr d finies dupliquent sous un autre nom les r gles pr d finies Prolog II Toutes les fonctionnalit s Prolog II sont galement disponibles en syntaxe Edinburgh IMPORTANT Dans ce chapitre tous les atomes donn s en position d argument ont le pr fixe vide Dans l criture des exemples il est suppos que l option permettant que tous les atomes en position d argument non pr fix s explicitement ont le pr fixe vide est activ e Cette option est d crite en annexe A Si cette option n est pas activ e il faut avoir l esprit que les atomes dont la repr sentation abr g e est d j connue du syst me doivent tre explicitement pr fix s avec le pr fixe vide sinon c est le pr fixe sys qui sera pris par d faut du moins dans le contexte user C est notamment le cas des atomes debug string fail utilis s dans le pr dicat set_prolog flag 2 true false utilis s par exemple dans le pr dicat write term 2 et input output read write pour stream _property 2 o open 4 10 1 Syntaxe 10 1 1 G n ralit s La syntaxe Edinburgh est accept e en entr e dans l un des cas suivants 1 l activation de Prolog II a si l on utilise l option E quivalent de m edinburg mo b si l on utilise un tat binaire sauv alors que la syntaxe Edinburgh tait activ
227. e la compilation du fichier f l endroit o se trouve la directive Tout se passe donc comme si la directive tait remplac e par le contenu du fichier f La compilation du fichier s effectue suivant le m me mode que celui pilot par le pr dicat de compilation de niveau sup rieur insert reinsert insertz Ceci est une directive de compilation et non pas un pr dicat c est a dire qu elle peut figurer au milieu d un source que l on compile mais ne peut se trouver dans une queue de r gle init_fassert i a l D crire l indexation d un paquet de faits non compil s Initialisation d un paquet de faits non compil s d identificateur d acc s i et d arit a L argument est une liste termin e par nil indiquant les combinaisons d indexation choisies pour les arguments de ces faits Cette liste est ordonn e par priorit de combinaison d indexation Chaque l ment de cette liste indique une combinaison et doit avoir pour valeur soit une liste d entiers termin e ou non par nil qui indique la combinaison des arguments indexer ou bien un entier si la combinaison se r duit un seul l ment La table de hash code correspondante cette combinaison aura alors une taille par d faut 512 entr es soit un doublet form de la forme pr c demment d crite en premier argument d un entier indiquant la taille de la table de hash code correspondante cette combinaison en deuxi me argument Ce pr dicat doit tre
228. e le petit exemple suivant homme Ab lard gt femme x gt non homme x gt femme Eloise gt femme Ab lard gt femme x eq x Eloise gt ProloglA R2 4 Manuel de R f rence XY X doit tre une variable et Y un terme quelconque NX Y signifie il existe X tel que Y soit vrai et est quivalent un appel de Y L utilisation de ce pr dicat qui est aussi un op rateur n a de sens que dans les pr dicats bagof 3 et setof 3 pour indiquer les variables existentielles et les retirer de l ensemble des variables libres bagof x p I Pour chaque instantiation diff rente de l ensemble des variables libres du but p non existentielles et n apparaissant pas dans le terme x unifie avec la liste de toutes les solutions x lorsqu on efface p Chaque liste est construite suivant l ordre des solutions trouv es Exemple aa 2 1 gt aa 1 2 gt aa 1 1 gt aa 2 2 gt aa 2 1 gt gt bagof X aa X Y L Y 1 L 2 1 2 nil Y 2 L 1 2 nil gt bagof X Y aa X Y L L 2 1 1 2 2 nil gt block e b block exit e block est une r gle pr d finie qui permet de terminer brutalement l effacement d un but b Cette primitive est faite essentiellement pour la r cup ration des erreurs On peut consid rer que Pour effacer block e b on efface b en ayant auparavant cr une paire de parenth ses fictives tiquet es par e autour du but
229. e part on peut imbriquer de tels commentaires par exemple le texte suivant sera VU comme un unique commentaire second com premier commentaire mentaire e Une cha ne de caract res crite au niveau sup rieur c est dire l o une r gle est attendue poss de aussi la valeur d un commentaire Les variables Les variables servent aussi bien d signer des constantes que des entit s plus complexes En voici la syntaxe variable alpha variable extended_var extended_var P letter digit _ alpha extended_var E big letter alpha Il y a donc pour les variables une syntaxe de base et une syntaxe tendue choisir parmi deux la syntaxe Prolog II et la syntaxe anglaise On doit indiquer si l on d sire une syntaxe diff rente de la syntaxe tendue Prolog II au moment du lancement de Prolog II de plus puisque ces deux syntaxes de variables sont incompatibles2 on ne peut pas avoir les deux extensions en m me temps 2 En effet l expression x est une variable en Prolog II et ne l est pas dans la syntaxe anglaise De m me le nom Pierre n est pas une variable en Prolog II mais en est une en syntaxe anglaise ProloglA R1 4 Poole Manuel de R f rence Voici quelques exemples de variables correctes Syntaxe Prolog II Syntaxe Edinburgh x X x X 12 plus XES Prix xl2 _prix prix X1Y2 y33 33 y_en_a _ prix _123 et quelques exempl
230. e r gle est un identificateur il commence par deux lettres en syntaxe Prolog II En particulier l acc s ne peut tre une variable dont le nom commence par une seule lettre en syntaxe Prolog II ni un nombre ni une chaine On rappelle pour la syntaxe Prolog II qu un nom de variable de relation ou de constante est une suite de mots s par s par un _ et ventuellement suivie d apostrophes Un mot est constitu d une ou plusieurs lettres ventuellement suivies de chiffres Si le premier mot du nom commence par au moins deux lettres on a affaire a un nom de relation ou de constante ce qu on appelle un identificateur ce qui constitue un acc s l gal a une r gle Dans le cas contraire on a affaire une variable Par exemple X x12 x toto a25 a al2 b_ titi sont des noms de variables bonjour xx qq_toto_25 comment_allez_vous avec des blancs sont des noms de relations ou de constantes LITTERAL INCORRECT gt insert humain x gt homme x humain x gt femme x gt LITTERAL INCORRECT skipping femme x PrologIA Prolog RO 8 Manuel de R f rence ERITAGE Lorsqu une telle erreur se produit au niveau de la fl che Prolog il s agit tr s souvent de l oubli du la fin de la r gle pr c dente 0 4 6 Erreurs d ex cution CE TERME NE PEUT ETRE UN BUT Voici un exemple qui utilise la r gle exec p gt p gt exec outm bonjour bonjour gt La variable p de la
231. e table et le descripteur descTablel Voir le manuel d utilisation 2 8 PrologIA Prolog R7 22 Manuel de r f rence HERITAGE Au moment du chargement Prolog cr era automatiquement un lien avec le tableau C Ce tableau pourra tre modifi et consult a partir des commandes standard Prolog assign et val Il faut noter que pour les donn es partag es d clar es avec OFFSET ZERO BASED les indices Prolog commencent 0 que pour les autres tableaux ils commencent 1 et que les indices C commencent 0 Les commandes suivantes C et Prolog ont strictement le m me effet et travaillent sur la m me zone m moire Prolog c assign com 4 100 com 4 100 val com 4 _x outl _x printf sld n com 4 val m str 1 x outm _x printf ss str 0 assign m str 2 abc strepy str 1 abc 7 6 Ajout de fonctions externes La d finition d une fonction externe se fait par la d claration d un descripteur On distingue deux types de fonctions externes les fonctions qui effectuent un traitement et se terminent le champ type du descripteur vaudra alors C_FUNCTION ou DIRECT_C_FUNCTION Les objets de type DIRECT_C_ FUNCTION seront d crits au paragraphe 7 7 les fonctions non d terministes qui peuvent effectuer plusieurs traitements diff rents et donc retourner plusieurs r sultats possibles le champ type du descripteur vaudra alors C FUNCTION BACKTRACK On trouvera parmi les types d objets possibles
232. e textuelle contenue dans la cha ne _xArgument Buts callbacks Les buts callbacks noms pr d finis sont dans le module global ils ont le pr fixe Ils sont crits par l utilisateur et appel s par le syst me Ils sont donc soumis des contraintes relevant de la programmation syst me On retiendra principalement les r gles suivantes Les buts callbacks peuvent effectuer des retours arri re mais la requ te transmise sera valid e si toutefois la requ te attend une validation s il existe au moins une solution Les buts callbacks ne doivent pas effectuer de traitements de taille d raisonnable notion purement intuitive ni fortiori d int raction avec l utilisateur incluant des phases modales Il y a risque de time out voire m me de r action d fensive du syst me Ceci implique que les buts callbacks ne peuvent pas tre mis au point sur site Il est n cessaire d effectuer leur mise au point avec un simulateur ddeCbServerClosing _hConversation Signale la terminaison pr matur e de la conversation Conversation par le Serveur quelle qu en soit la raison Il s agit d une notification post riori et le statut de terminaison de son traitement est sans effet sur le r sultat transmis au serveur La valeur de Conversation doit tre consid r e comme d sormais invalide et recyclable donc ddeEndConversation _hConversation chouera si tent ddeCbServerUpdate _hConversation tltem _xArgument A
233. e_boeuf gt viande Poulet au tilleul gt par viande Veau marengo gt ProloglA 7 Prolog LIE PIT AZT AEN AGE D buter avec Prolog R0 5 viande Poulet_roti gt Appeller l diteur par la commande gt edit viande 1 o la notation viande 1 d signe le paquet de r gles concernant la relation viande avec 1 argument L diteur est activ et montre les r gles d finissant la relation viande R aliser les modifications voulues et sortir de l diteur normalement V rifiez que Prolog a bien relu les nouvelles d finitions gt list viande 1 viande Veau marengo gt viande Poulet roti gt On ex cute le programme modifi et on finit par quit puisqu on ne d sire pas conserver l tat courant gt viande p p Veau_ Marengo p Poulet_roti gt plat p p Veau_Marengo p Poulet_roti p Bar_aux_algues p Chapon_farci gt quit 0 4 Les erreurs les plus courantes Voici quelques explications sur les erreurs les plus courantes qui peuvent se produire lors de l utilisation de Prolog II 0 4 1 D bordement de l espace de code PAS ASSEZ DE PLACE POUR LE CODE Il faut red marrer Prolog avec un espace plus grand pour le code option c de la ligne de commande Si le syst me de r allocation automatique n est pas d sactiv au d marrage de Prolog un certain nombre de r allocations se produiront avant le d bordement Le code occupera alors
234. ean lt 34 rue blanche gt v64 y jean lt 34 rue blanche gt v65 gt assign tab i t ou assign tab i t tassign tab i t ou tassign tab i t Affectent le terme 7 l l ment de rang i du tableau tab Ce tableau doit avoir t d fini au pr alable avec def array ProloglA R4 8 Manuel de R f rence Pour l acc s des l ments de tableaux dans val les notations tab i et tab i sont quivalentes cependant elles ne sont pas repr sent es par les m mes termes Prolog et dans le cas de l utilisation de fab i le compilateur optimise l acc s au tableau Pratiquement on r servera la notation tab i pour la d signation d l ments de tableau uniquement Nous ferons galement la m me remarque que pr c demment concernant les optimisations assign est optimis fassign ne l est pas backtrack term Tableau pr d fini du module sys de longueur 100 indices possibles entre 1 et 100 qui peut tre manipul l aide des pr dicats pr d finis val ou tval et assign ou tassign Les valeurs qui lui sont assign es sont perdues au backtracking Chaque l ment du tableau est initialis 0 Exemple gt insert test i gt assign backtrack termi1 111 val backtrack _term 1 1i test i gt val backtrack_term 1 i gt test i i 111 i 0 def_array i n D finit dynamiquement un tableau de termes Prolog de nom i et de taille n Ce tableau se comportera comme une varia
235. ed V false F integer rounding function V toward_zero F char_ conversion V off F max_arity V 8388607 F debug V off F unknown V warning F double quotes V string halt X halt Sont respectivement quivalents a quit X et quit set prolog flag X Y Positionne la variable d tat X de l environnement la valeur Y Ce pr dicat est aussi une directive de compilation c est a dire que les variables d environnement peuvent tre modifi es au milieu d un source que l on compile Exemples consult set_prolog flag double quotes codes foo myrule abc set prolog flag debug on 10 7 Traduction de DCG En mode insertion Prolog transforme en r gles Prolog I les r gles de grammaire de la forme A gt B o A est un terme et B est une suite de termes Pour chaque terme de la suite de termes B Si c est une liste il est interpr t comme une suite de symboles terminaux l Definite Clause Grammar extension des grammaires hors contexte et sous ensemble des grammaires de m tamorphose ProloglA Prolog INT RITA LI LITE Extensions Edinburgh R 10 21 Si c est une cha ne de caract res celle ci est transform e en une liste de caract res qui est donc ensuite consid r e galement comme une liste de symboles terminaux Si c est un terme entre accolades il est interpr t comme un appel une r gle effectuer tel quel Sinon le terme est co
236. emande de substitution d un pr fixe inexistant save 2 ou kill module I pour un module inexistant suppress I ou suppress 2 pour une r gle inexistante kill_array I d un tableau non d fini 2 donne les m mes avertissements qu en mode 1 et en suppl ment signale pendant la compilation les variables non muettes qui n ont qu une seule occurence dans la r gle susceptibles de r sulter d une faute de frappe lectures des tailles de Prolog La valeur d termine la mani re de d finir les tailles de l espace de Prolog ProloglA 2 J Prolog TE RITA IEE VW CE Prolog HERITAGE Utilisation de Prolog II Windows U2 9 U lecture des tailles des espaces dans le fichier binaire initial D tailles par d faut d finies au chapitre 3 h entier heap D finit la taille en Ko r serv e pour la pile de copie i file input D finit le nom du fichier sur lequel est dirig e l unit courante de lecture d s le d marrage Par d faut la lecture se fait la console J file journal D finit le nom du fichier journal cr par la primitive paper de Prolog d faut prolog log m file module Charge au d marrage de Prolog apr s chargement de l tat binaire le module objet de nom file Si le fichier n est pas trouv dans le r pertoire courant il est cherch dans le r pertoire d fini par la variable d environnement PrologDir2 Si plusieurs de ces options maximum 20 sont utilis es elles sont trait es
237. emps la cha ne initiale puis la cha ne r sultat l argument effectif du pr dicat Prolog est un triplet lt valeur_initiale variable r sultat taille max_ r sultat gt dont l l ment faille max r sultat est un entier sp cifiant la taille de la zone allouer pour l op ration dont l adresse est transmise la fonction C dont l l ment valeur_initiale est la valeur initiale copi e dans la zone allou e pour l op ration dont l l ment variable r sultat sera unifi avec le r sultat cha ne Prolog Par exemple relaiProlog lt pi x 100 gt est quivalent aux instructions C suivantes char arg1 100 strcpy arg1 pi fonctionC argl suivies de l affectation de la variable x avec la nouvelle valeur de arg1 ProloglA R 7 30 Manuel de r f rence Pour un tableau d entiers ou de r els il est n cessaire d avoir une zone d entiers ou de r els qui tient lieu de tableau dont on d finit le nombre d l ments et susceptible de contenir dans un premier temps les l ments du tableau en entr e puis les l ments du tableau en sortie l argument effectif du pr dicat Prolog est un quadruplet lt valeur_initiale variable r sultat taille r sultat taille tableau gt dont l l ment faille tableau est un entier sp cifiant le nombre d l ments de la zone allouer pour l op ration dont l adresse est transmise la fonction C dont l l ment faille r sultat indique le
238. en tre Elles ont un r le de trace ou listing et fonctionnent la mani re des terminaux C est dire tout ce qui est affich n est pas modifiable la saisie est en mode ligne et donc tant que la ligne de saisie n est pas termin e elle est modifiable Ces fen tres ont une capacit limit e une troncature automatique se fait lorsque c est n cessaire par le haut de la fen tre Voyons maintenant les autres objets ils sont con us pour tre plac s sur une fen tre qui est alors appel e parent Ils se d placent avec leur parent et ne peuvent exister apr s sa destruction Leur taille et leur position sont d finies par des coordonn es relatives au coin int rieur sup rieur gauche du parent Qu advient il si le parent change de dimension Pour d terminer le comportement d un objet lors du redimensionnement de son parent on d finira l attachement de l objet un bord de sa fen tre parent ProloglA U5 4 Manuel d Utilisation Windows Un objet est attach a un bord de son parent signifie que l cart d fini au moment de la cr ation entre ce bord et l objet est constant quelles que soient les volutions des dimensions du parent Il faut noter que un objet est toujours attach dans les deux directions au minimum a un bord pour chaque direction Par d faut il s agit du bord haut et du bord gauche les objets dont la dimension n est pas fix e par le systeme peuvent tre attach s aux deux bords p
239. ent Si debug n a jamais t effac avant l appel statistics les valeurs affich es ne sont pas significatives Les arguments ont la m me signification que pour le pr dicat alloc set_options o Permet de changer les options ayant pu tre d finies au lancement par l option f de la ligne de commande sans sortir de Prolog o est une cha ne de caract res Exemple pour passer en syntaxe de variable Edinburgh et en syntaxe de r els standard gt set options vErs version o Permet d obtenir la version courante de Prolog Par exemple si la version courante est la version 3 1 gt version o o 301 ProloglA J Prolog TOA NATE tr t E J Prolog INT RITA CIS LATE L environnement R6 25 6 8 Gestion automatique des espaces et des piles Le fonctionnement d une machine suppose des piles pour g rer l ex cution et des espaces pour stocker les structures du programme Le syst me Prolog II qui est une machine virtuelle poss de trois piles pile de r cursion stack qui contient les environnements successifs des appels de la d monstration en cours pile de copie heap qui contient une copie des structures de la d monstration en cours pile de restauration trail qui contient la m morisation des valeurs des arguments pour le backtracking et deux espaces pour les structures internes espace pour le code qui contient toutes les r gles compil es et les donn es
240. ent arit Supprime tout point d arr t sur le paquet de r gles d identificateur d acc s ident et d arit arit Voir aussi le pr dicat no_ spy a Permet de supprimer tous les points d arr t en une seule commande gt ident arit Indique que le pr dicat d identificateur d acc s ident et d arit arit ne devra pas tre d velopp en trace lt ident arit Annule l effet de la commande inverse gt sur le pr dicat d identificateur d acc s ident et d arit arit lt a Permet d annuler l effet de toutes les commandes inverses gt qui ont eu lieu sur des pr dicats Les points d arr t fixes les pr dicats ne pas d velopper en trace le mode d impression et la d finition de la marge sont permanents Ils ne sont pas modifi s par une activation sp cifique ou par d faut de l outil Ils ne peuvent tre modifi s ou supprim s qu explicitement 6 6 6 Exemple A titre d illustration int ressons nous au programme d exemple des menus livr dans le kit Les commentaires de l ex cution sont donn s en italique PrologIA J Prolog WTA NATE LITE HERITAGE L environnement R6 21 Dola T EA On v rifie les r gles charg es puis on se place en mode debug Enfin on lance le but dif d Sorbet aux poires balanced meal Truffes_sous_le_sel p d Ce qui est en gras est entr par l utilisateur Les lignes donn es par l utilisateur doivent tre termin es par un retour chariot que nous n in
241. ent de cette commande le contexte d crit est m moris dans le module d environnement sous la forme sys env context identification suite explicite suite implicite pr fixe par d faut gt Lorsqu un nouveau contexte est activ l ancien contexte n est plus pris en compte L argument identification doit tre un identificateur ou une cha ne Le deuxi me argument doit tre une liste altern e telle que d crite au paragraphe pr c dent Le troisi me argument est une liste de cha nes repr sentant des pr fixes et le quatri me argument est une cha ne d finissant le pr fixe par d faut Lorsque Prolog est lanc le contexte courant de lecture criture est le contexte sain d fini par la commande set _ context user sys Pour un autre exemple le deuxi me contexte abstrait d fini au paragraphe pr c dent sera d fini et activ par la commande gt set context No2 m1 out m2 peter sys a b set_context Identification Permet de r activer un contexte en le d signant par son identification une fois qu il a d ja t d fini ProloglA R3 12 Manuel de R f rence Note 1 Lorsqu on d finit des contextes ne contenant pas la famille sys dans la suite implicite il faut faire attention au fait que nil ne repr sente pas en g n ral la marque de fin de liste sys nil cela d pend du pr fixe par d faut et de la suite explicite Des erreurs peuvent en r sul
242. ent facilement tre int gr s dans ce sch ma la syntaxe des identificateurs correspond la seule notation abr g e et la convention d extension est de les pr fixer avec C est la convention par d faut lorsqu on d marre Prolog I 3 3 1 Param trage de l criture d un identificateur complet Jusqu pr sent et dans la suite de ce manuel le caract re qui d limite le pr fixe du suffixe dans la repr sentation d un identificateur complet a toujours t pr sent 5 s wo X A ae A 3 comme tant le caract re C est le caract re qui est choisi par d faut pour tenir ce r le Il peut toutefois tre remplac par un caract re graphique en effa ant le pr dicat pr d fini set_prefix limit 1 set_prefix_limit s s doit tre une cha ne d un seul caract re ce caract re doit tre un caract re graphique Il devient alors le caract re utilis pour d limiter le pr fixe du suffixe dans l criture d un identificateur complet Exemple gt set prefix limit gt ident sys ident gt string ident x y aSa ident x aSa Y ident prefix_limit s s est unifi avec le caract re qui sert a d limiter le pr fixe du suffixe dans l criture d un identificateur complet Exemple gt prefix limit x set prefix limit prefix limit y x 2 y Le changement de l criture des identificateurs complets doit se faire en connaissance de cause et avec des pr cautions En eff
243. ent toujours attribuer un pr fixe en fonction du contexte courant qu ils se trouvent en position d argument foncteurs ou bien en position de but t te ou queue de r gle N anmoins nous fournissons la possibilit d attribuer automatiquement le pr fixe vide aux identificateurs non pr fix s en position d argument Il suffit pour cela de d marrer Prolog avec l option fa Par exemple dans ce mode l la lecture de call nl fera appel une r gle sans doute non d finie n1 tandis que call sys nl imprimera bien un saut de ligne Pour annuler cette possibilit ex cuter le pr dicat set options al ProloglA Prolog A 2 Annexe A HERITAGE Vue logique et vue imm diate Dans le m canisme de la modification dynamique d un paquet de r gles assert retract suppress la norme d finit la vue dite logique c est dire que tout se passe comme si l ex cution d un paquet de r gles se faisait sur une copie de celui ci donc ind pendamment des modifications ventuelles subites lors de cette ex cution Une autre vue possible est celle dite imm diate qui consiste prendre imm diatement en consid ration toute modification d un paquet La vue de Prolog I est la vue imm diate Les seuls cas o le comportement peut tre diff rent d une prise en compte imm diate sont ceux de la suppression d une r gle dans un paquet o il reste encore des alternatives ex cuter L num ration de tous les ca
244. ents est a Dans la deuxi me forme seul le paquet ayant l arit la plus faible est consid r retract t q Rechercher et supprimer 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 avec et la queue avec q Utilise l indexation des r gles si c est possible sinon essaie les r gles les unes apr s les autres dans l ordre Si une telle r gle n existe pas alors retract t q choue t doit tre soit un identificateur soit un n uplet dont le premier argument est un identificateur connu Si une r gle qui convient est invisible la d compilation la r gle est supprim e et la primitive s efface sans unifier les variables libres det et q suppress i a Supprimer tout un paquet de r gles i doit tre un identificateur et a un entier toutes les r gles composant le paquet de nom i et d arit nombre d arguments a sont supprim es S il n y a pas de r gle le pr dicat s efface en imprimant ventuellement un warning Exemple data 1 gt data 2 gt data 3 gt gt data x gt suppress data 1 gt data x WARNING APPEL A UNE REGLE NON DEFINIE gt suppress i a n Supprimer une r gle i doit tre un identificateur et a et n deux entiers la r gle num ro n du paquet correspondant au nom i et l arit nombre d arguments a est supprim e S il n y a pas une telle r gle le pr dicat s efface en imp
245. er apr s avoir effac N De plus cette repr sentation permet de traduire les r gles terminales comme 12 13 etc par nombre lt x y gt gt mot n lt x y gt integer n qui utilise la r gle standard mot a lt a x X gt gt et la r gle pr d finie integer Enfin reconna tre si une phrase appartient au langage d fini par notre grammaire revient effacer expression lt p nil gt o p repr sente la phrase d entr e sous forme de liste ProloglA C 4 Annexe C HER A Prolog TAGE C 1 2 Mise en vidence de la structure profonde Nous sommes donc rendus au point o nous savons traduire une grammaire en un ensemble de clauses qui diront si oui ou non une phrase appartient au langage Nous pouvons faire mieux en compl tant nos relations pour faire ressortir l arbre construit par l analyse de la phrase pour l exemple pr c dent Pour cela nous n aurons besoin que d ajouter un argument aux pr dicats associ s aux non terminaux de la grammaire Celui ci ne fera qu exprimer comment une phrase est construite partir des sous phrases qui la composent Nous obtenons donc nombre n lt x y gt gt mot n lt x y gt primaire n lt x y gt gt nombre n lt x y gt Finalement notre r gle de d part deviendra somme e lt x y gt gt produit p lt x z gt reste de somme p e lt z y gt o e repr sentera l arbre associ l expression ana
246. ers une cha ne de type C contenant la repr sentation d un identificateur Prolog complet Il a une signification diff rente dans le cas d un objet de type SYMBOL ARRAY Il repr sente alors seulement le module auquel appartiennent les identificateurs du tableau Il contient donc la repr sentation du pr fixe de ces symboles type d finit le type de l objet externe d clar Les valeurs possibles sont INT_ARRAY pour un tableau d entiers CHAR ARRAY pour un tableau de caract res STRING _ARRAY pour un tableau de cha nes SINGLE FLOAT ARRAY pour un tableau de r els en simple pr cision DOUBLE ARRAY pour un tableau de r els en double pr cision SYMBOL ARRAY pour un tableau d identificateurs C_FUNCTION O C_FUNCTION_PROTECTED pour une fonction externe C_FUNCTION_BACKTRACK OU C_FUNCTION_BACKTRACK_PROTECTED pour une fonction externe non d terministe DIRECT_C_FUNCTION pour une fonction externe a appel direct Pour les tableaux de donn es il est possible de leur ajouter la constante OFFSET_ZERO_BASED pour permettre en Prolog de les indexer a partir de z ro ProloglA Prolog R7 18 Manuel de r f rence HERITAGE size d finit l arit de la r gle dans le cas d une fonction externe ou bien la taille du tableau s il s agit d une donn e commune N est pas significatif dans le cas de SYMBOL ARRAY adresse D finit l adresse effective de l objet C d clar ou d un sous tableau de descripteurs pour SYMBOL_ARRAY 7 4 2
247. es On dispose galement de relations l mentaires les formules atomiques portant sur ces donn es Le programme consiste valuer une formule logique construite partir des formule atomiques des connecteurs et et ou et des quantificateurs existentiel et universel portant sur des variables typ es c est dire dont le domaine des valeurs est pr cis Ainsi la question type que l on peut poser est du genre quels sont les valeurs de x appartenant au domaine D pour lesquelles la propri t P est vraie ce qui est traduit par la formule element x ens x D P Par exemple la question 1 dans quelle ville habite mimosa se traduit par la formule element x ens x ville habite_a mimosa x de m me 2 olive porte t elle des lunettes se traduit par element x ens x booleen lunette olive x ProloglA J Prolog TRITATE V UIUC 2 TDIT z Quelques exemples de programmes Prolog ll C 11 Poole et enfin 3 quelles sont les villes ayant au moins un habitant age de moins de 20 ans et portant des lunettes correspondant a element x ens x ville existe y nom et habite_a y x et est age de y a et inferieur a 20 lunette y oui Ces trois questions ont t pr enregistr es et sont activ es par reponse a tout qui crit la question en clair suivie des r ponses Voici ce que cela donne les r ponses de la machine sont pr c d es de gt
248. es d expressions qui ne sont pas des variables correctes Syntaxe Prolog II Syntaxe Edinburgh ph X XX x12 prix prix ler x y en a PrologIA J Prolog LE RYT AVES CI LAGE 1 4 Constantes El ments de base R1 5 Les donn es les plus simples sont des constantes Elles peuvent tre de quatre types les identificateurs les nombres entiers les nombres r els et les chaines de caract res identifier identifier identifier identifierE abbreviated_id abbreviated_ id prefix_limit prefix name integer_number integer_number integer_number integer_number integer_number real_number real_numberS binary_number octal number hex_number digits string quoted_char quoted_char 9 quoted chari format escape prefix prefix_limit abbreviated_id abbreviated_id prefix prefix_limit graphic symbol graphic symbol name extended_var LUS character 2 mn mnt y iinne name prefix_limit name letter alpha digits Ob binary_ number 0o octal number Ox hex_ number 0 character digits ee digits E e D d digits digits digits o CE e DD d digits binary digit binary digit octal digit octal_digit hex_digit hex_digit digit digit MAL quoted char character
249. es deux valeurs possibles de v 1 0 Si la valeur de v n est fournie ni en argument ni dans la liste c est la valeur 0 qui est donn e par d faut Lorsque v est red fini dans c est toujours cette derniere valeur qui est prise en compte s est une chaine qui d finit le texte qui accompagne la boite ProloglA fs 7 Prolog UT LA MATE Prolog HERITAGE Primitives graphiques U5 43 rb Kg i gt rb lt g i gt v rb lt g i gt v s D crit un radio bouton i d un groupe g o g est un identificateur et i une constante quelconque Ce radio bouton de valeur 0 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 c est la valeur 0 qui est prise par d faut Lorsque v est red fini dans c est toujours cette derni re valeur qui est prise en compte s est une cha ne qui d finit le texte qui accompagne le radio bouton En sortie nom_de_zone est repr sent par g i et valeur_finale par 0 ou 1 et ceci pour chacun des radio boutons du groupe rbl lt g i gt rbl lt g i gt v rbl lt g i gt v s Sensiblement identique rb mais avec la contrainte que 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 e
250. es pr dicats sans leurs arguments ventuels mais pr cisant l arit sous la forme identificateur arit impression des pr dicats avec leurs arguments ventuels en notation fonctionnelle avec une limite en profondeur param trable A partir d une profondeur de 1000 la totalit du terme est imprim L impression des arbres infinis en totalit utilise sa repr sentation en syst me d quations On ne sait pas dire priori si l impression restreinte d un arbre infini est possible impression des pr dicats avec leurs arguments ventuels sous forme d arbre par le pr dicat Dessin draw tree Le module de dessin d arbre doit tre charg pour pouvoir utiliser ce mode Il est possible de modifier la r gle Dessin draw_tree de mani re red finir ce qui est imprim par le debugger D tail de la notation fonctionnelle en profondeur limit e On attribue une profondeur chaque atome du terme imprimer Ne seront affich s que les atomes dont la profondeur est inf rieure celle fix e Le comptage se fait r cursivement partir du but afficher il d marre 1 La profondeur est incr ment e lorsqu on passe d un terme un sous terme de la mani re suivante Si un terme fonctionnel f al t2 as appara t dans un terme de profondeur n alors le foncteur f est de profondeur n et ses arguments al as sont de profondeur n 1 ProloglA R6 14 Manuel de R f rence Si un n uplet lt t1 t2
251. espond une valeur en dehors des index possibles pour le tableau des r els 526 put term CODAGE DE TUPLE ERRONE un index de tuple r f rence une suite dont le premier l ment n est pas de type entier 527 put term TAG NON VALIDE 528 put term L ARGUMENT PROLOG N EST PAS UNE VARIABLE LIBRE Un backtracking est provoqu quand on retourne Prolog avec err nb gal un entier strictement n gatif ProloglA Annexe D ProloglA la VA J Prolog LIE RYT AIEEE CI LAGE E 1 E 2 E 3 E 4 E 5 Annexe E Prolog Il et les caract res Pr sentation Jeu ISO avantages et inconv nients Jeu h te avantages et inconv nients Remarques Conventions E 1 Pr sentation Il existe deux jeux de caract res utilisables en Prolog I e un jeu d fini par le code ISO 8859 1 e le jeu de la machine h te La d termination du jeu choisi se fait au lancement d une session Prolog et est valable jusqu la fin de la session voir le manuel d utilisation 2 3 Avoir deux jeux de caract res implique avoir deux modes de codage interne de ces caract res e Un mode dans lequel quelque soit le syst me h te le codage interne est invariant c est celui du code ISO 8859 1 e Un second mode dans lequel le codage interne utilis est celui du syst me h te Tant que l on manipule des caract res il n y a pas de probl me Cependant si l on manipule les codes des caract res seul le jeu ISO assure
252. esse Les arguments de la r gle peuvent tre acc d s depuis la fonction C par les proc dures standard de communication de donn es get _ et put_ La fonction doit tre d clar e de type int Elle est appel e par Prolog avec un seul param tre de type ong indiquant le num ro de l appel courant Elle doit retourner la condition de terminaison ECHEC pour un chec SUCCES pour un succ s gt 0 pour une erreur SUCCESS_END_OF C BACKTRACK pour indiquer le succ s du dernier appel ou FAIL END OF C BACKTRACK pour indiquer l chec du dernier appel Lors d une coupure un appel suppl mentaire cette fonction sera fait avec en argument la valeur conventionnelle CUT OF C BACKTRACK Le but de cet appel n est pas de trouver une autre solution mais de signifier qu il n y aura plus d autres appels et ainsi permettre de terminer les traitements en cours comme par exemple lib rer de la m moire allou e fermer des fichiers Pendant un appel cette fonction il est possible de m moriser une valeur enti re dans l espace de Prolog l aide de la fonction store C backtrack data long ptr ou de r cup rer cette valeur par le retour de la fonction long restore_C_backtrack_data void Permet de construire des r gles pr d finies en langage externe non d terministes 7 6 1 Exemple de d claration de r gle pr d finie Le fichier suivant li Prolog produit automatiquement la nouvelle r gle pr d finie sys reverse s1 s2
253. est d pendant d un ordinateur et d un syst me d exploitation sp cifique Il y aura donc un manuel d utilisation par mat riel Pour installer le logiciel Prolog II et l utiliser voir les chapitres 1 et 2 du manuel utilisateur Le manuel de R f rence commence par une introduction l mentaire Prolog et son utilisation pratique Dans le second chapitre on pr sente de mani re un peu plus th orique les bases de Prolog Les chapitres suivants examinent les diff rentes r gles pr d finies concernant le contr le la manipulation des r gles les op rations sur les donn es les entr es sorties l environnement le debugger et l diteur Les chapitres suivants concernent l ouverture vers les autres langages on d crit comment ajouter des r gles pr d finies crites par l utilisateur faire des appels crois s ou d clarer des zones de donn es communes entre Prolog et d autres langages et intercepter des interruptions et d clencher un traitement Prolog Enfin le dernier chapitre d crit la biblioth que de primitives sp cifiques la syntaxe Edinburgh En plus de ce manuel il y a une partie Annexe qui est valable pour toutes les implantations galement Elle d taille quelques points secondaires mentionn s dans le manuel de R f rence En particulier vous y trouverez les diff rences entre l interpr teur Prolog II et le compilateur Prolog I ou bien quelques exemples de programmes pour illustrer l utilisation de Prolog
254. et si la d finition du caract re de d limitation se fait dynamiquement il faut pr ter attention aux repr sentations des identificateurs qui apparaissent de mani re statique dans les donn es des programmes Prolog ou C D autre part l utilisation de la notation de pr fixes embo t s Base Normal Data pour un module peut faire changer le nom du module apr s utilisation de la primitive Une fonction C est fournie pour connaitre le caract re en vigueur Elle est d crite dans le chapitre 7 de ce manuel ProloglA R3 8 Manuel de R f rence 3 4 Contexte de Lecture et Ecriture Un contexte de lecture criture d finit les conventions de passage d un identificateur abr g un identificateur complet lors d une op ration de lecture et vice versa lors d une op ration d criture un moment donn un et un seul contexte est utilis c est le contexte courant de lecture criture Un contexte est d fini de mani re abstraite par un couple suite d identificateurs complets pr fixe par d faut 3 4 1 Lecture Lors d une op ration de lecture d un identificateur abr g on l identifie avec le premier identificateur de la suite ayant la m me repr sentation abr g e S il n y en a aucun le pr fixe par d faut est appliqu Soit par exemple le contextel sys out sys outm Wont m out m1 la lecture des s quences suivantes donne identificateur abr g identificateur complet out
255. et leur signification les conventions suivantes sont utilis es obj d2 m2 m2E moO po P2 Suffixe des fichiers contenant des sources crits en C Suffixe des fichiers contenant des fichiers objet Suffixe des fichiers ne contenant que des d finitions de macros Prolog II Suffixe des fichiers contenant un module source Prolog II crit en syntaxe Prolog II Suffixe des fichiers contenant un module source Prolog II crit en syntaxe Edinburgh Suffixe des fichiers contenant le code d un module Prolog compil attention ils ne sont pas compatibles avec un diteur de liens du syst me seul Prolog peut les manipuler Fichiers de format identique au pr c dent mais contenant un tat complet fichiers sauv s avec la commande exif Seuls ces fichiers peuvent tre utilis s comme tat initial pour le d marrage d une session Prolog Suffixe d un fichier source contenant des r gles Prolog II crites en syntaxe Prolog II Le fichier est charg avec la commande insert lorsque la syntaxe courante est la syntaxe Prolog II ProloglA U1 8 Manuel d Utilisation Windows p2E Suffixe d un fichier source contenant des r gles Prolog I crites en syntaxe Edinburgh Le fichier est charg avec la commande consult lorsque la syntaxe courante est la syntaxe Edinburgh pex Suffixe d un fichier source contenant des commandes Prolog Doit tre utilis par la commande input xt Suffixe
256. eze l hors de x 1 hors de x nil gt hors de x x 1 gt dif x x hors de x l1l C 7 Les arbres infinis Les automates d tats finis sont un bon exemple d objets qui peuvent tre repr sent s par des arbres infinis rationnels Le programme pr sent ici calcule un automate minimal qui accepte certaines chaines et en refuse d autres Toutes ces cha nes sont faites partir de a et b La r gle pr d finie draw equ x est utilis e la fois pour dessiner l automate et pour minimiser sa taille c est dire le nombre de ses tats Son utilisation suppose que le module de dessin soit charg gt infinite gt accepte s a b nil accepte s b a nil refuse s a nil refuse s b nil refuse s a a nil refuse s b b nil refuse s a a b nil refuse s b b a nil entier de Peano n automate de taillei s n I draw_equ s fail x x final aa bb y Z y non final aa bb I x Z x z non final ox aa bb x Y Le terme fail force le backtracking pour viter l impression finale Voici le programme complet permettant de produire tout cela Il faut noter que les buts accepte s x et refuse s x sont effac s de fa on compl tement d terministe Pour cette raison afin d obtenir l automate minimal il n est pas n cessaire de placer entier_de_Peano n comme premier but de la suite des buts pr c dents effacer ProloglA J Prolog tr t E
257. f R 5 3 eof action R 10 13 14 eof code R 10 13 eol R 5 3 J Prolog TRITATE V UIUC eqR2 8 eql R 4 4 equations R 2 12 equations R 3 22 err txt R 6 5 err txt U 1 2 err txt U 2 10 err txt U 1 8 ERROR R 8 2 error R 10 13 exit R 3 34 exitR 6 1 exitU2 2 expR4 6 extern_event U 5 21 49 fail R 2 8 fail ifR 10 4 fasserta R 3 23 fassertz R 3 23 fgetargtype R 7 3 fgetdouble R 7 5 fgetinteger R 7 5 fgetmaxstring R 7 5 fgetreal R 7 5 fgetstring R 7 5 fgetstrterm R 7 9 fgetterm R 7 17 file_dictionary R 3 13 file name R 10 13 file window U 5 10 findall R 2 8 find pattern R 4 10 float R 4 5 float R 10 6 floor R 4 5 flush R 5 9 flush_output R 10 17 7 Prolog LIE RYT AIEEE AEN LAGE focus U5 18 focus inU 5 21 focus out U 5 21 FONT U5 8 font U 5 8 18 fontheight U 5 17 fonts all U 5 28 fonts usr U 1 2 fonts usr U 5 28 FONTSIZE U 5 8 fontsize U 5 8 force R 10 13 foreground U 5 18 fprefixlimit R 7 15 fprosymbol R 7 15 fputdouble R 7 7 fputinteger R 7 7 fputreal R 7 7 fputstring R 7 7 fputstrterm R 7 9 fputterm R 7 17 FRAMEPANEL U 5 3 7 framepanel U 5 7 17 free R 2 8 free R 4 2 freeze R 2 10 freplace R 3 24 fresetpermanentsymbol R 7 16 fretract R 3 24 fretractall R 3 24 front window U 5 10 fr_err txt U 1 3 fsetpermanentsymbol R 7 16 fsymbolstring R 7 15 functor R 10
258. f input console gt in_char t 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 Remarque le caract re fin de ligne s il est assimil un espace pour d autres primitives qui analysent les caract res lus vaudra bien pour cette primitive Mn Remarque toute commande suite de buts se termine au Lorsque in char est lanc sur la ligne de commande le premier caract re lu est le caract re qui suit imm diatement le Il s agit souvent de fin de ligne Exemple gt in char c c n gt clear_input in_char c a lt CR gt c a ProloglA R5 4 Manuel de R f rence HER Prelog in_char t Lecture d un caract re non blanc Lit tous les caract res blancs et se comporte comme in char f Exemple gt in_char x in char y in char z in char t ab c d x aly Db zg Mo t wh next_char t Essaie d unifier le prochain caract re l entr e avec sans le lire vraiment next_char t Lit tous les caract res blancs s il y en a et ensuite se comporte comme next_char t Exemple gt next_char x in_char y abc x a y a inl s inl s n Lecture d une ligne Lit toute la fin de la ligne courante et l unifie en tant que cha ne de caract res avec s n est unifi avec le rang de la ligne lue dans son unit n est beaucoup plus significatif pour les fichiers voire les fen
259. fen tre poss dant une barre de titre ne convient pas aux fen tres de forme cadre Le titre du menu s ins re alors dans la barre de menu de la fen tre et l activation du menu se fait en r alisant un clic sur son titre La liste d items est alors d roul e au dessous Noter que le titre du menu n est pas un item du menu Scrollbar barre de d filement dont l ascenseur curseur qui se d place dans la barre exprime par sa position une valeur comprise dans l intervalle associ la barre Peut servir de doseur A chaque activation de la scrollbar elle g n re un v nement 5 1 3 Configuration du graphique Prolog II au d marrage Au lancement Prolog compte une barre de menus trois fen tres pr d finies dont une seule est visible il s agit de la fen tre console de type TTY qui est par d faut l unit courante de lecture et d criture L unit de lecture et l unit d criture peuvent tre chang es respectivement par les primitives input et output Les deux autres fen tres sont la fen tre graphic de type GRAPHICS qui est l unit graphique courante par d faut L unit graphique est l unit sur laquelle agissent les primitives pr fix es par gr _ L unit graphique peut tre chang e par la primitive gr_window la fen tre trace de type TTY utilis e en mode debug ou trace ProloglA U5 6 Manuel d Utilisation Windows La barre de menus comporte des menus pr d finis le menu F
260. fi 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 1l est par contre fourni dans la liste des tats pass e aux boutons sous la forme d un couple identificateur valeur Exemples gt gr dialog ccol Voulez vous recommencer le test buttonD button Annuler fail nil pohly ProloglA Bulag U5 46 Manuel d Utilisation Windows ITAGE Uoulez uous recommencer le test gt gr_dialog Choose the color you want crow rb rb_1 red 1 Red rb rb_1 green 0 Green crow cb cb 1 0 Extended colors ccol buttonD Show Color button Cancel fail p ED 1d mad cb_1 C rb_1 red R rb_1 green G nil Choose the color you want Red 3 Green J Extended colors C 1 R 1 G 0 gt gr dialog crow abcdefgh ccol button Stop fail buttonD OK nil button Cancel fail HELLO WORLD ijklmnopq m civ igs pet iy EE abcdefgh ijkimnopq HELLO WORLD gt gr dialog glist 5 10 listi lt rouge vert bleu jaune violet noir blanc orange 4 6 poi ProloglA Bulag gt buttonD LL zG U5 47 Primitives graphiques L list1l jaune noir nil nil gt insert enable 11 13 gt set_item l1 zonel 1 12 set_item 12 zone2 0 13 disable 11 13 gt set item l1 zonel 0 12 set_item 12 zone2 1 13 set_i
261. function fgetinteger no_arg value err integer 4 no arg value err integer 4 function fgetreal no arg value err integer 4 no arg err real 4 value integer 4 function fgetdouble no_arg value err integer 4 no_arg err real 8 value integer 4 function fgetstring no_arg lg value err integer 4 no_arg lg err character value integer 4 function fgetmaxstring no_arg lg max lg value in external code err integer 4 no arg lg max lg in external code err character value no_arg Entier donnant le rang de l argument choisi dans le pr dicat Prolog Le premier argument a le rang 1 le second a le rang 2 et ainsi de suite ProloglA R7 6 Manuel de r f rence value Adresse de la donn e qui doit recevoir la valeur de l argument de rang no_arg dans le pr dicat Prolog Ig Entier utilis dans les fonctions Fortran qui manipulent des chaines qui doit recevoir la longueur effective de la chaine de caracteres lg max est la taille de la zone de caract res in_external_code est un bool en qui indique si la cha ne doit tre en code caract re externe ceci est utile lorsque l option caract res ISO est activ e et que l on utilise des caract res non pr sents dans la premi re moiti du jeu ISO voir Annexe E Si la valeur est 0 aucune transformation n est faite sur la cha ne Prolog err La variable point e est diff rente de 0 si une erreur ou un backtracking a t demand Ces fonctions retour
262. gestion de programmes Prolog comportant un tr s grand nombre de r gles Ceci est fait en partageant l ensemble des r gles en diff rents modules Introduction La notion de module vient de la n cessit de regrouper les r gles d un gros programme en ensembles fonctionnels que l on appelle modules 3 1 1 Qualification des pr dicats Afin de permettre une certaine ind pendance entre l laboration des diff rents modules il est souhaitable de pouvoir automatiquement rendre ind pendants les noms des r gles des diff rents modules La m thode la plus simple que l on puisse imaginer est d tendre les noms de r gle en les pr fixant syst matiquement avec le nom du module on a ainsi implicitement construit un partitionnement des r gles calqu sur celui des noms de r gle la s mantique restant rigoureusement identique celle d un Prolog sans module Le pr fixe est alors appel qualificateur lt nom de r gle gt lt prefixe gt lt suffixe gt lt prefixe gt lt lettre gt lt alpha num gt lt suffixe gt lt lettre gt lt alpha num gt ProloglA J Prolog TA NAT LITE R3 2 Manuel de R f rence HERI Exemples lexicon data 1 gt lexicon data 2 gt lexicon pn X gt grammar sentence X gt lexicon pn X1 grammar sv X2 grammar error message M gt sys write M grammar data 8 gt Les noms de r gles de modules diff rents sont par d finition diff rents puisqu il
263. gh Le chargement de ce module dans une session Prolog en syntaxe Marseille provoque le passage en mode de compatibilit Edinburgh fr_err txt Fichier contenant les messages d erreurs en fran ais graphic mo Module objet Prolog contenant toutes les primitives graphiques Fichier charger pour lancer l environnement graphique de Prolog graphstr mo Module objet Prolog utilis automatiquement par l environnement graphique en fonction de la configuration choisie au d marrage de Prolog obdialog mo Module objet Prolog charger pour utiliser la primitive de gestion d objets graphiques structur s gr dialog Est automatiquement charg par le chargement du fichier graphic mo prolog2 pre Fichier texte contenant la ligne de commande Prolog II Si ce fichier existe les options qui y sont sp cifi es remplacent les options par d faut Ce fichier est d abord recherch dans le r pertoire courant puis dans le r pertoire d fini par la variable d environnement PrologDir2 Il est ditable par n importe quel processeur de texte ProloglA U1l 4 Manuel d Utilisation Windows tools R pertoire d outils comme dbgbase mo Module objet recharger pour avoir des messages d erreur plus complets concernant les r gles pr d finies de la syntaxe Prolog II dbgedin mo Module objet recharger pour avoir des messages d erreur plus complets concernant les r gles pr d finies de la syntaxe Edinburgh Peut tre charg d
264. glA 7 Prolog R6 4 Manuel de R f rence HERITAGE 6 3 3 Editer un fichier de texte quelconque edit s s est une chaine Permet d diter le fichier de nom s 6 4 Date temps et mesures reset_chrono chrono x chrono unifie x avec le temps en secondes coul depuis le dernier reset_chrono reset_cpu_time cpu_time x cpu_time unifie x avec le temps cpu en millisecondes coul depuis le dernier reset cpu time date j m a s Calcule les arguments j m a s de la date courante Les quatre arguments d signent respectivement le jour du mois le mois l ann e et le rang du jour dans la semaine dimanche 0 lundi 1 date_string s Calcule la date courante exprim e en anglais et unifie la chaine correspondante avec s date_stringF s Calcule la date courante exprim e en fran ais et unifie la cha ne correspondante avec s week n s Donne dans s la chaine correspondant au jour de la semaine dont le rang est n et vice versa month n s Donne dans s la cha ne correspondant au mois dont le rang estn et vice versa delay n Temporise n millisecondes time x Donne un temps absolu en secondes L origine de ce temps est variable d une machine a une autre time h m s Calcule les arguments h m s de l heure courante Ils repr sentent respecti vement l heure les minutes et les secondes ProloglA Z J Prolog LE RYT AEE CIS LATE L environnement R6 5 6 5 Lien avec le syst me sys_comman
265. glA J Prolog TA NAT LITE Prolog HERITAGE Utilisation de Prolog II Windows U2 3 espace du code C est l espace o est charg l tat initial et le code g n r par le compilateur La taille par d faut est de 500 Ko Il n y a pas de limite sur la taille des modules hormis la contrainte que la somme des tailles des modules soit inf rieure a l espace total pour le code Lorsque des r gles fortiori des modules sont supprim es l espace est automatiquement r cup r pour les r gles qui ne sont pas en cours d utilisation espace du dictionnaire Dictionnaire des identificateurs Prolog Taille par d faut 200Ko espace de la pile de r cursion stack Contient les variables locales de la d monstration en cours Taille par d faut 100Ko Il n y a pas de consommation d espace dans cette pile dans le cas de r cursion terminale voir chapitre Contr le de l effacement des buts du manuel de r f rence espace de la pile de copie heap Le compilateur Prolog II utilise une technique de copie de structures permettant la mise en oeuvre d un garbage collector tr s performant La taille par d faut est de 100Ko espace de la pile de restauration trail Pile de m morisation des valeurs restaurer lors des retours arri re backtracking dans l ex cution en cours Taille par d faut 50 Ko Le garbage collector permet la r cup ration d espace dans cette pile en cas de d bordement espace pour les appe
266. gles pr d finies val tval ou is Elles doivent tre appliqu es des arguments de type entier ou r el X ou X valeur X valeur X compl ment bit bit de X La valeur de X doit tre de type entier Le r sultat est de type entier X You XY valeur X Y division enti re de valeur X par valeur Y Le r sultat est de type entier log t valeur og t valeur n f logarithme n p rien valeur Le r sultat est de type r el truncate t valeur truncate t valeur trunc f conversion en entier de la valeur de t Le r sultat est de type entier ProloglA Prolog R10 8 Manuel de R f rence HERITAGE 10 4 3 Composition et d composition d objets X You X Y Si X est instanci Y est unifi avec une liste dont le premier l ment est le foncteur de_X et les l ments suivants les ventuels arguments dans l ordre Si X est libre Y doit tre instanci avec une liste X est alors unifi avec le n uplet construit avec le premier l ment de la liste comme foncteur et les autres l ments comme arguments A un l ment atomique correspond une liste constitu e de ce seul l ment Exemples foo a b f00 a b P hea X o00 a b X f00 a b foo a b L L foo a b foo X b foo a Y X a Y b CA beg 1 Fld des foo a b foo b a pes Me E Oy PE CRI IS X 714 _714 u _714 arg N T
267. graphique h te new_listbox o p v b lt x1 yl x2 y2 gt 1 Cr e une Tistbox identifi e par o dont les coordonn es sont x y1 x2 y2 dans la fen tre parente p Elle sera visible selon la valeur de v La d finition des items de la listbox devra se faire par la primitive set_attribute b peut tre nil sys get_event ou un identificateur de r gle Dans ce dernier cas chaque action de s lection dans la listbox le but b 0 n m est lanc o n est le num ro de l item affect et m le modifieur utilis est une liste d options ventuellement vide nil form e partir des identificateurs multiple si la s lection peut comporter plusieurs items PrologIA U5 16 S S S Manuel d Utilisation Windows chscroll si la barre de d filement horizontale est souhait e top_attach left_attach right_attach bottom_attach Par d faut la listbox est en mode s lection simple au plus 1 item s lectionn et poss de une barre de d filement verticale qui peut tre invisible si le nombre d items de la boite est insuffisant new_popup_menu o p Cr e un support de popup menu identifi par o attach la fen tre p Aucun item n est encore cr il faut pour cela utiliser la primitive set menu Remarque il n est pas n cessaire de cr er un support de popup menu avant d utiliser la primitive set menu En effet si set menu est utilis avec un nom de fen tre cela fait r f rence au p
268. gt jolie solution 9567 1085 ProloglA esha C 14 Annexe C ERITA 10652 Voici le programme resolution de SEND MORE MONEY solution s e n d m o r y gt different s e n d m o r y nil somme r1 0 0 m 0 somme r2 8 m 0 r1 somme r3 e o n r2 somme r4 n r e r3 somme 0 d e y r4 somme r 0 0 r 0 gt retenue r somme r x y 2z r gt retenue r chiffre x chiffre y val add r a y t val div t 10 r val mod t ie zy chiffre 0 gt chiffre 1 gt chiffre 2 gt chiffre 3 gt chiffre 4 gt chiffre 5 gt chiffre 6 gt chiffre 7 gt chiffre 8 gt chiffre 9 gt retenue 1 gt retenue 0 gt different nil gt different x 1 gt hors de x 1l different 1 hors de x nil gt hors de x a l gt dif x a hors de x 1 j jolie solution gt solution s jolie sortie s jolie sortie s e n d m o r y gt outm out s out e out n out d line outm out m out o out r out e line outm line out m out o out n out e out y line ProloglA Z sie GE Quelques exemples de programmes Prolog I C 15 C 6 Construction d un chemin Ce programme num re des chemins sans boucle par utilisation de la r gle freeze Rappelons que freeze retarde l effacement du litt ral sur lequel il porte tant qu une certaine variable n est pas affect e Il est utilis ici pour construire
269. gt sys out mastic gt ml mastic outm gt sys outm 3 4 2 Ecriture On crit les noms avec la forme la plus abr g e que permet le contexte Lors d une op ration d criture d un identificateur de pr fixe p et d abr viation a on crit la repr sentation abr g e a 1 si l identificateur figure dans la suite et est le premier de la suite avoir l abr viation a 2 si le pr fixe par d faut est p et aucun identificateur de la suite ne poss de l abr viation a Dans tous les autres cas on crit la repr sentation compl te Ces deux conditions assurent la r versibilit des op rations de lecture criture r alis es avec le m me contexte Par exemple avec le contexte pr c dent l criture des s quences suivantes donne 1 La mani re pr cise de noter ces sp cifications en Prolog II sera donn e plus loin cf paragraphe 3 4 4 PrologIA J Prolog LITE J Prolog LIE PIT AZT AEN AGE Structuration et modification des r gles R3 9 identificateur complet repr sentation externe sys out gt out m out gt m out ml mastic gt mastic sys outm gt outm b c toto SaS b c toto 3 4 3 Notation simplifi e de la suite d identificateurs d un contexte La plupart des programmes manipulent des r gles pr d finies et n cessitent donc pour pouvoir utiliser la repr sentation abr g e de leurs noms que tous ceux ci soient list s explicitement lorsqu on d finit un contexte les utilisant
270. gument du pr dicat associ err La variable point e est diff rente de 0 si une erreur ou un backtracking a t demand Ces fonctions retournent z ro lorsqu une erreur s est produite ou une valeur non nulle lorsqu il n y a pas eu d erreur 7 3 Fonctions de communication de termes quelconques Les termes dont il est question dans ce chapitre sont des termes qui ne repr sentent pas des arbres infinis et qui peuvent tre d un type Prolog quelconque Par exemple une liste de n uplets contenant des variables est un tel terme Pour pouvoir communiquer ces termes et en particulier des types de donn es qui sont propres Prolog il faut disposer d une codification de ces donn es pour les identifier hors Prolog Pour cela Prolog permet de choisir entre des cha nes de caract res qui existent dans tous les langages mais qui n cessitent l utilisation d un analyseur pour identifier les termes repr sent s une structure arborescente d l ments type valeur cod e dans des tableaux de donn es communes tous les langages Pour identifier les termes repr sent s il s agira de parcourir cette structure 7 3 1 Au moyen de cha nes de caract res Les fonctions d crites ici sont simples employer et faciles mettre en uvre Elles peuvent tre choisies par exemple pour une premi re r alisation d interfa age de Prolog avec des langages externes ProloglA HERITAGE Extensions avec des langages e
271. guments du n uplet n 0 N ni Me argument du n uplet 1 Exemples gt arg2 0 abcdef x x 6 gt arg2 3 abcdef x x c gt arg2 0 aa bb cc dd ee ff nil x x 6 gt arg2 3 aa bb cc dd ee ff nil x x cc gt arg2 0 lt aa bb cc dd ee ff gt x x 6 gt arg2 3 lt aa bb cc dd ee ff gt x x cc arg n t t2 La primitive correspondante de l interpr teur Prolog II a t renomm e arg2 dans le compilateur arg 3 est une r gle pr d finie du mode Edinburgh conc_list_string l s Concat ne les cha nes de la liste pour cr er la cha ne s Exemple gt conc list string How are you nil x x How are you copy term tl t2 Fait une copie du terme en rempla ant chaque variable libre contrainte ou pas par une nouvelle variable sans contrainte et unifie cette copie avec 2 C est a dire que les deux termes sont repr sent s par le m me arbre aux noms de variables pr s t est un terme prolog quelconque voire infini Exemple gt copy_term one 2 x y t t one 2 v33 v31 copy_term_ with constraints ti t2 Analogue au pr dicat copy_term 2 mais copie les contraintes sur les variables ProloglA R4 12 Manuel de R f rence HER Prelog enum i k1 k2 enum i k2 k1 et k2 doivent tre des entiers connus Si kj gt k2 alors on a un chec Par d finition cette r gle s efface de k2 k 7 mani res la premi re consiste unifier i et k la
272. hain appel de r gle a abort program G n re une interruption utilisateur b breakpoints Affiche les points d arr t actifs Voir aussi le pr dicat show spy ProloglA J Prolog LIE RITA EE LEP YAO J Prolog LIE PIT AZT AEN AGE L environnement R6 19 e end debugging and go Provoque la terminaison du mode debug et poursuit l ex cution E Execute Empile une session Prolog f fail Provoque un chec sur le but affich g go to spy Continue sans impression jusqu au prochain point d arr t fixe G entier Go to end Continue jusqu la fin du programme en imprimant seulement les points d arr t fixes si entier vaut 0 Si entier est diff rent de 0 imprime aussi les buts figurant dans la queue des points d arr t fixes h help Liste les commandes disponibles i entier indent La valeur de entier d finit la marge en nombre de caract res pour l impression J jump Donne la liste des r gles dont on ignore le corps en mode trace l entier length La valeur de entier d finit la longueur de la ligne pour les sorties m entier mode La valeur de entier permet de choisir le mode d affichage des buts Prolog 0 Afficher sous la forme identificateur arit 1 Affichage par le programme de dessin d arbres 2 1000 Affichage en profondeur limit par entier gt 1000 Affichage complet du terme n next Arr t sur le prochain but qui n est pas un sous but N Next while tracing Arr t sur le p
273. hargement et la sauvegarde d un ou plusieurs modules objets se font par les primitives oad et save Si un tat binaire de d marrage ou bien un fichier de modules objets contient un module m qui poss de une r gle avec le nom m ini module alors celle ci est automatiquement ex cut e apr s le chargement de l tat binaire ou du fichier objet Lorsqu un module objet est sauv sur un fichier il est sauv avec un dictionnaire permettant de renommer les pr fixes au chargement Il est ainsi possible de r soudre les probl mes de conflits de noms quels qu ils soient et de construire des programmes n interf rant pas avec les donn es qu ils manipulent ou au contraire de d finir des modules de type base de donn es et lexique dont les noms peuvent tre fusionn s au chargement 3 6 R sum ou Approche simplifi e des identificateurs contextes et modules 3 6 1 Identificateurs Les identificateurs sont des objets Prolog qui peuvent servir la construction d autres objets Prolog On distingue deux modes d utilisation des identificateurs comme pr dicat sert d finir une r gle 3 1 1 comme foncteur sert de donn e 3 1 2 ProloglA R3 18 Manuel de R f rence Dans tous les cas la syntaxe d un identificateur Prolog 3 3 est prefixe suffixe prefixe et suffixe sont des suites de caract res en accord avec la syntaxe choisie Prolog II ou Edinburgh peut tre remplac par un caract re graph
274. i avec la cha ne lue Attention il s agit bien d un terme Prolog de type cha ne 1 e avec les quotes et non de n importe quoi consid r comme une cha ne Exemple gt in_string s in char c Hello s Hello c ProloglA Prolog R5 6 Manuel de R f rence HERITAGE in_ident t Lit d abord tous les caract res blancs puis essaie de lire un identificateur Prolog Si l objet lu n a pas la syntaxe d finie par l option courante d un identificateur alors rien n est lu et in_ident choue Sinon f est unifi avec l identificateur qui a t lu Exemple lire entier n gt in integeri n lire ident i gt in_ident i l lire chaine s gt in string s lire caractere c gt in_char c gt lire x1 lire x2 lire x3 lire x4 lire x5 lire x6 aa bb 123 w xl ident aa x2 caractere x3 caractere x4 ident bb x5 caractere x6 entier 123 in_word tl t2 Lit tous les caract res blancs puis lit le mot le plus long le transforme en une cha ne et essaie d unifier cette cha ne avec t1 Un mot est soit 1 une suite de lettres 2 une suite de chiffres 3 tout caract re qui n est ni un blanc ni une lettre ni un chiffre Dans le cas 1 2 est l identificateur correspondant si cet identificateur est d j connu ou nil s il s agit de sa premi re apparition Dans ce dernier cas l identificateur n est pas cr dans le dictionnaire
275. ichauts Melanie p Grillade de boeuf d Sorbet aux poires Comment Pr sentation D une mani re g n rale pour faciliter la lisibilit de la mise au point et diff rencier visuellement les messages du programme et ceux du debugger il est possible de d finir une marge en nombre de caract res pour les impressions du debugger Quelque soit le message transmis par le debugger il sera indent du nombre de caract res de la marge pour l affichage gt repas e p d CALL repas v156 v191 v226 DBG CALL hors d oeuvre v156 DBG CALL plat v191 DBG n next CALL dessert v226 DBG e Artichauts Melanie p Grillade de boeuf d Sorbet aux poires RECALL 2 dessert v190 ProloglA Pits J Prolog RYT ASEIE He GE L environnement R6 13 DBG e Artichauts Melanie p Grillade de boeuf d Fraises chantilly RECALL 3 dessert v190 DBG e Artichauts Melanie p Grillade de boeuf d Melon_en_surprise RECALL 2 viande v165 DBG CALL dessert v226 DBG Une autre alternative est de rediriger les messages du debugger dans un fichier Dans ce cas seule la s quence d invite appara tra dans l unit de trace Voir la commande du debugger i ou les r gles pr d finies debug f et debug n f Pr cision La pr cision de l affichage des buts est param trable selon la quantit d informations que l on souhaite obtenir Trois modes sont disponibles impression d
276. ichier dans lequel seront redirig es les impressions du debugger Le fichier est ferm l ex cution d un pr dicat de d sactivation de l outil de mise au point Si les impressions de mise au point taient d j redirig es le pr c dent fichier est ferm pour tre remplac par f no_trace ou no_debug sont des pr dicats de d sactivation de l outil de mise au point quel que soit son mode sans alt rer la configuration en place 6 6 4 Gestion des points d arr t Les r gles pr d finies qui permettent de manipuler les points d arr t sont spy i a Place un point d arr t sur l entr e de la r gle de nom i et d arit a Ce point d arr t n est pris en compte que lorsque le debugger est activ avec un mode le permettant no_spy i a Enl ve tout point d arr t plac sur la r gle de nom i et d arit a show_spy l Unifie avec la liste des primitives sur lesquelles un point d arr t est actif Les primitives sont mentionn es sous la forme habituelle i a avec i son identi ficateur d acc s et a son arit 6 6 5 Commandes du mode interactif A chaque point d arr t le debugger imprime la s quence d invite DBG pour indiquer son attente d une commande utilisateur La frappe d un retour chariot seul not RC dans ce chapitre correspond a la commande par d faut step du mode interactif Les autres commandes se terminent par un retour chariot Les commandes disponibles sont RC step Continue jusqu au proc
277. ie en envoyant tous les caract res en attente d criture sur l unit physique associ e out t outl t Ecrit le terme sur l unit courante Tout terme crit avec out peut tre relu avec in si l option d interpr tation du caract re sp cial est active cf 2 3 du manuel d utilisation Si le terme est plus long que la longueur restant sur la ligne courante un retour chariot est ins r en respectant les principes suivants 1 Lorsqu une chaine ne peut tre imprim e sur une seule ligne elle est coup e l endroit requis par insertion d un retour chariot masqu c est dire pr c d par le caract re 2 Un nombre n est pas coup sauf si tout seul il est plus long que toute une ligne dans ce cas il est coup comme une cha ne 3 Un identificateur n est pas coup sauf si tout seul il est plus long que toute une ligne dans ce cas il est coup comme une chaine L criture du terme se fait avec les conventions suivantes 1 Les listes sont imprim es en notation point e pour la syntaxe Prolog II en notation avec des crochets carr s pour la syntaxe Edinburgh ou si l option notation standard des r els est activ e ProloglA R5 10 Manuel de R f rence 2 Si une cha ne contient un caract re non imprimable celui ci est crit sous forme d escape s quence imprimable voir outm 3 Tout identificateur ne r pondant pas a la syntaxe d un identificateur est quote 4 Le con
278. ier pour conna tre la taille allouer pour r cup rer une cha ne La fonction renvoie une erreur uniquement lorsqu il n existe pas d argument du rang demand get_arg type no arg value lgPtr err int no_ arg char value int lgPtr int err integer 4 function fgetargtype no_arg value lgPtr err integer 4 no_arg lgPtr err character value no_arg Entier donnant le rang de l argument choisi dans le pr dicat Prolog Le premier argument a le rang 1 le second a le rang 2 et ainsi de suite lDes fonctions suppl mentaires existent pour le transfert de cha nes Voir l annexe E ProloglA R7 4 Manuel de r f rence value Adresse d une variable de type caract re dans laquelle sera crit le code du type de l argument La signification des caract res retourn s est la suivante code type T entier R r el S cha ne N identificateur E nil V variable libre D liste T n uplet Le codage des types est le m me que celui choisi pour les proc dures get term put_term cf 7 2 1 except pour l identificateur nil qui est rep r par le E lgPtr Adresse d une variable enti re dans laquelle sera crite la taille en octets occup e par l argument Lorsque l argument n est pas un terme simple autrement dit lorsque c est une liste ou un n uplet la taille est non sp cifi e err La variable point e est diff rente de 0 si une erreur s est produite gale 0 sinon La fonc
279. ificateur abr g paul donnera a b paul puisque cette abr viation ne correspond aucun l ment de la suite explicite ni aucun identificateur abr g du sous ensemble clos de la famille sys La lecture de l identificateur abr g nil donnera sys nil puisque cet identificateur fait partie du sous ensemble clos de la famille ferm e pour le contexte sys L criture de sys out donnera sys out puisque le premier identificateur de la suite ayant l abr viation out poss de un pr fixe diff rent ProloglA Structuration et modification des r gles R3 11 7 Prolog RYT ASEIE 3 4 4 Notation en Prolog La suite explicite d identificateurs d un contexte est repr sent e en Prolog sous forme d une liste altern e permettant de regrouper des noms de m me pr fixe Pr fixe ListeDeNomsAbr g s Pr fixen ListeDeNomsAbr g sn nil nm Ainsi la suite explicite ml out ml outm jf init m2 toto m2 peter sera repr sent e dans la notation infix e ml out outm nil en eine nat m2 toto peter nil nil en notation avec des crochets m1 out outm JE init m2 Le toto peter 3 4 5 Primitives pour les contextes et les familles d identificateurs set_context Identification SuiteExplicite Suitelmplicite D faut Cette commande permet la fois de d crire un contexte et de l activer comme le contexte courant de lecture criture Lors de l effacem
280. igurer dans une cha ne sans pr caution particuli re sauf le caract re qui doit tre doubl et ventuellement le caract re qui doit tre doubl si l interpr tation de la lecture du est active cf les options de comportement U 2 3 par exemple la cha ne nn il faut traiter est correcte et avec pr caution De fa on g n rale le caract re ne doit pas forc ment tre doubl lorsque l interpr tation de lecture du est active cf 2 3 du manuel d utilisation si avec les caract res qui le suivent il forme une expression s quence escape repr sentant un autre caract re il faut le doubler dans tous les autres cas il n est pas utile de le doubler Utiliser suivi de RETURN pour ignorer une fin de ligne Les codes hexad cimaux doivent commencer par x Quand l interpr tation du est active r gles annot es par il plusieurs expressions commen ant par permettent de repr senter un caract re Les expressions suivantes permettent de sp cifier certains caract res non imprimables dans la d finition d une cha ne b espace arri re backspace saut de page form feed n saut la ligne newline Lors de son criture ce caract re est le cas ch ant remplac par le s caract re s requis pour obtenir une nouvelle ligne sur l unit de sortie r retour en d but de ligne carriage return t tabulation D autres expressions permettent de repr
281. il gt new_tlv V 1 2 nil foo new tlv X 3 4 nil faa unify tlv V X V X V foo 1 2 nil faa 3 4 nil nil X foo 1 2 nil faa 3 4 nil nil 2 5 4 Sorties Les impressions des variables attribu es d une question se fait d une mani re sp ciale lt nom de variable gt lt terme gt Le terme qui suit est la liste des termes attribu s la variable pr sent e de mani re identique au pr dicat get_tlv 2 Exemple gt new tlv x zz foo x foo zz nil 2 5 5 Exemple Ce programme attache une variable l ensemble de ses valeurs possibles S il ne reste plus qu une seule valeur elle est affect e la variable insert Si X est une nouvelle variable lui attache l ensemble de valeurs L sinon lui attache l intersection de L avec l ensemble d ja attach be in X L gt get tlv X L1i be in Li X L be in nil X L gt new set X L be in Li X L gt get values Li L2 inters L L2 L3 attach or affect X L3 ao ob oo attache X la liste L de ses valeurs possibles new set X L gt new tlv X L verify in R cup re la liste des valeurs possibles get_values gt get_values t_ag L1 L2 L gt get values L2 L3 conc L1 L3 L concatenation de 2 listes cone nil L L gt ProloglA 7 Prolog TAGE 7 ssi Le contr le de l effacement des buts R2 17 ER ITA iS cone X L1 L2 X L3 gt conc L1 L2 L3 attach or affect X F gt 1 unify_tlv X F une se
282. ilation d un tel but ne sera pas identique mais quivalente au but d origine Le but block e b apparaissant dans une queue de r gles sera d compil en block e _ b La r gle pr d finie quit g n re un block exit 14 Elle est d finie ainsi quit gt block exit 14 quit i gt block exit 14 i A titre d illustration voici un programme qui lit une suite de commandes executer commande gt block fin commande toujours lire et exec lire et exec gt outm in char k exec k exec q gt block exit fin commande exec f gt block exit 16 Interruption exec n gt toujours p gt repeter p fail repeter gt repeter gt repeter Dans cet exemple la commande q utilise block exit pour retourner au niveau sup rieur de executer commande La commande f simule une erreur Prolog et rend le contr le au block qui traite les erreurs de Prolog puisque 16 ne peut s unifier avec fin commande S il n y a pas de block englobant on revient au niveau sup rieur de Prolog block e c b block exit e c Fonctionnement analogue aux formes pr c dentes avec deux tiquettes e et c la place d une seule b est le but effacer block e c b lance l effacement de b l effacement ult rieur de block exit deux arguments produira la recherche d un block dont les deux premiers arguments s unifient avec les deux arguments de block exit Lorsque les optimisations de com
283. ile qui permet de cr er des fen tres d dition et sortir de Prolog le menu Windows qui permet de rendre visibles ou invisibles les fen tres existantes le menu Control qui permet de g n rer une interruption utilisateur passer en mode debug ex cuter rapidement certains pr dicats pr d finis Prolog le menu Tools qui permet d activer certains outils certains menus du syst me h te Nous avons regroup ici des primitives tr s g n rales du graphisme init screen initialise le mode graphique Ce pr dicat est automatiquement lanc au chargement du module graphic mo end screen d sinstalle le graphique c est dire ferme les fen tres supprime les menus supprime l acc s aux pr dicats graphiques 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 graphic _system s Unifie s avec une cha ne de caract res qui est fonction du syst me graphique h te M pour Motif W pour Windows3 ou P pour Presentation Manager Le fichier int_edit mo permet si on le d sire l utilisation de l diteur int gr par les pr dicats edit et editm la place de l diteur d fini par la variable d environnement PrologEdit Il faut pour cela effacer les buts suivants gt reload int_edit mo gt exi
284. ille de chaque l ment de la s quence et constitue une colonne d l ments dispos s les uns au dessus des autres et align s sur leur c t gauche ccol l D crit une colonne centr e verticalement dont le contenu est d crit par la s quence row L D crit une rang e horizontale d crite par la s quence de primitive s et dont les l ments sont align s sur leur bord sup rieur si est une s quence la primitive calcule la taille de chaque l ment de la s quence et constitue une rang e d l ments dispos s c te c te align s sur leur bord sup rieur crow l D crit une rang e d objets d crits par et centr s horizontalement c est a 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 chfill 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 L tat d un groupe ne peut tre modi
285. ind pattern err err nb break add procedure calls here default err nb 500 La terminaison normale du programme externe qui se traduit par un succ s en Prolog intervient quand le param tre err nb de la fonction C user rule vaut z ro Selon la nature de votre programme externe vous pouvez choisir de l ins rer directement dans le module prouser ou bien de l crire dans un fichier s par Si vous avez crit vos r gles externes dans un ou plusieurs modules diff rents des modules prouser et fprouser alors vous devez compiler ce s module s puis donner le s nom s au programme prolink pour l dition de liens Tel qu il est livr le module prouser tablit les relais d appel entre le compilateur Prolog et la fonction externe find pattern qui constitue pour vous un exemple d criture de r gles externes Attention Le programme externe find pattern donn en exemple met en uvre la r gle pr d finie find pattern s1 s2 n Sa modification inconsid r e peut introduire un mauvais fonctionnement de cette r gle ProloglA J Prolog LIT PIT AZT HE Ajout de r gles externes m thode des parasites D 5 D 4 Comment provoquer un backtracking ou renvoyer une erreur Pour renvoyer une erreur depuis une fonction externe celle ci doit positionner le param tre err_nb de la fonction user rule Note importante A parir de la version 4 1 le param tre err n est plus significatif il est ignor par
286. ion de la variable x il s agit d un nombre entier qui identifie de mani re unique la variable deux variables ont la m me date si et seulement si elles sont li es entre elles c est ce m me nombre qui est utilis par le compilateur pour l impression des variables libres voir l exemple ci dessous Exemple gt eq x y var time x tx var time y ty var time z tz out x y z line v35 v35 v172 y x _tx 35 _ty 35 _tz 172 gt La date de cr ation d une variable correspond une notion du temps qui est sensiblement la m me que celle de l horloge Prolog le temps avance lors de l effacement des buts et recule avec le backtracking Dans l exemple suivant la variable x est cr e trois fois on constate qu elle poss de bien la m me date de cr ation gt enum i 3 var_time x t i 1 t 35 i 2 t 35 i 3 t 35 gt Attention la valeur de la date de cr ation des variables n est pas invariante lors des tassages des piles par le garbage collector 4 2 Les op rations arithm tiques L valuation d une expression est faite au moyen de la r gle pr d finie val Le r sultat d une valuation est soit un entier soit un r el soit un identificateur soit une cha ne Les bool ens sont repr sent s par les entiers 0 et 1 ProloglA J Prolog WTA NATE LITE J Prolog LIE PIT AZT AEN AGE Op rations pr d finies sur les donn es R4 3 val t t2 tval tl t2 Evaluent l expression f e
287. ion 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 cotits de r cup ration ou de reproduction de ces donn es L acheteur a toutefois droit 4 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 II est une marque d pos e de PrologIA ProloglA Manuel de R f rence ProloglA J Prolog WIAA SAT S LAGE 0 1 0 2 0 3 0 4 0 Debuter avec Prolog Le on 1 Lancement de Prolog Le on 2 Utilisation d un programme d exemple Le on 3 L Editeur Les erreurs les plus courantes Dans les exemples de ce manuel ce qui est crit par l utilisateur apparait en caract re pench et tout ce qui est crit par l ordinateur apparait en caract re T
288. ique cf set prefix limit Cette syntaxe a l avantage de pouvoir d signer un gros ensemble d identificateurs simplement d apr s une particularit de leur nom On appellera famille d identificateurs de pr fixe untel tous les identificateurs pr dicats ou foncteurs dont le nom s crit untel suffixe 3 2 On appellera module de pr fixe untel ou par extension module untel toutes les r gles et ou tableaux et ou variables statiques dont l identificateur d acc s s crit untel suffixe 3 2 Astuce si vous voulez un identificateur invariant pour tous les programmes simple crire et facile retenir choisissez pour cet identificateur le pr fixe vide Il est appel dans les paragraphes pr c dents 3 1 2 foncteur g n rique 3 6 2 Notation abr g e et contextes On rencontre tr s fr quemment des situations o la grande majorit des identificateurs que l on doit traiter s crit toujours avec le m me pr fixe On voudrait donc se passer de r p ter ce pr fixe et avoir une repr sentation d identificateur sous forme abr g e Dans cette optique pour simplifier la mise en uvre et la lisibilit des programmes il existe des conventions pour une repr sentation simplifi e des identificateurs qui d terminent de mani re unique la donn e Prolog Ces conventions sont appel es contextes de lecture criture 3 4 La conversion entre le codage interne de la donn e et sa repr sentation externe
289. ique de m moire garbage collector dans les espaces de travail de Prolog piles code dictionnaire Une technique nouvelle nous permet une r cup ration plus performante e R allocation dynamique des espaces de travail de Prolog e Compilation tr s optimis e de certaines r gles pr d finies et notamment des r gles arithm tiques e Entiers en pr cision infinie ProloglA J Prolog WTA NATE LITE x Manuel de R f rence HER Modularit e Modularit nouvelle notion propos e pour le standard e L criture de gros programmes est rendue possible gr ce aux modules compil s s par ment chargeables et d chargeables volont e Run time permettant de diffuser des applications autonomes Ouverture vers l ext rieur e Liens bidirectionnels avec les autres langages possibilit d appeler en Prolog des sous programmes crits dans d autres langages Possibilit d appeler depuis un programme quelconque un programme crit en Prolog y compris avec l obtention successive de diff rentes solutions Tous les cas de figure d appels crois s sont d sormais pris en charge e Communication avec d autres applications e Structures de donn es enti rement ouvertes avec l interface requis pour la communication inter langage de tous les types de donn es sans restriction sur la nature des termes qui par exemple peuvent comporter y compris des variables et des identificateurs Possibilit de partager des z
290. irectement la place de edinburg mo dbggraph mo Module objet recharger pour avoir des messages d erreur plus complets concernant les r gles pr d finies graphiques Peut tre charg directement la place de graphic mo int_edit mo Module objet Prolog recharger pr dicat reload pour pouvoir utiliser l diteur int gr la place de l diteur externe d fini par la variable d environnement PrologEdit 1 2 3 Fichiers pour les extensions standards 32 bits Tous les fichiers cit s ci dessous servent la reconstruction de Prolog II Les fichiers objets et la librairie sont indispensables et constituent l ex cutable final prolog exe princip c princip obj Fichiers source et objet contenant le lancement du but principal de Prolog proentry c proentry obj Fichiers source et objet contenant la routine d entr e standard de Prolog H WinMain Le fichier proentry obj peut tre remplac par un programme utilisateur utilisant Prolog comme un sous programme proext h Fichier source C contenant des d clarations de macros et de structures inclure dans les modules utilisateur crits en C prolink bat Fichier de commandes pour refaire l dition de liens et reconstruire l ex cutable Il peut tre modifi par l utilisateur ProloglA 7 Prolog LIE RITA EE LEP YAO J Prolog LIE PIT AZT AEN AGE Guide d installation sous l environnement Windows U1 5 prolog def Fichier de desc
291. itialis e avec le texte contenu dans le fichier de nom s file window s1 quivaut file window s1 s1 front_window s Unifie s avec le nom de la fen tre Prolog se trouvant au premier plan et ayant le focus get window s v get_window s v x1 y1 x2 y2 get _window s i v x1 y1 x2 y2 Renseigne sur le type les attributs la visibilit et les coordonn es de la fen tre s La forme deux arguments renseigne uniquement la visibilit Unifie successivement par backtracking les param tres s f v x1 y1 x2 y2 avec les valeurs correspondant chacune des fen tres Voir la primitive new_window s t v x1i y1 x2 y2 pour la signification des param tres Le type et les attributs sont rendus sous la forme identificateur La valeur de l attribut distance est donn e en pixel et non plus en pourcentage de la partie dessinable gr_window s La fen tre ou la zone graphique s devient l unit graphique courante gr_window_is s Unifie s avec le nom de l unit graphique courante ProloglA 2 J Prolog LIE RITA EE LES YAO 7 Prolog LIE PIT AZT AEN AGE a a a A a Primitives graphiques U5 11 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
292. ivement s assurer que les zones sont suffisantes pour les r sultats attendus Il s assurera galement que les types des arguments sont coh rents avec les d clarations faites en C ProloglA J Prolog TA NAT LITE Extensions avec des langages externes R 7 29 J Prolog LIE PIT AZT AEN AGE La convention pour les donn es de type simple c est dire les entiers et les r els est la suivante l argument effectif du pr dicat Prolog est un doublet lt valeur_initiale variable r sultat gt dont le premier l ment valeur_initiale est la valeur initiale de la zone dont l adresse est pass e en param tre la fonction C Si la valeur est quelconque on peut mettre comme valeur initiale la marque I pour indiquer un entier ou R pour un r el dont le deuxi me l ment variable r sultat sera unifi avec la nouvelle valeur de l argument rendue par la fonction entier ou r el Par exemple relaiProlog lt 180 x gt lt 3 14e0 y gt est quivalent aux instructions C suivantes long argl 180L double arg2 3 14 fonctionC amp argl amp arg2 suivies des affectations des variables x et y avec les nouvelles valeurs de arg et arg2 La convention pour les donn es qui n cessitent une zone m moire d pend du type de la donn e Pour une cha ne de caract re il est n cessaire d avoir une zone de caract res dont on doit d finir la taille susceptible de contenir dans un premier t
293. jeu de fonctions est fourni pour le langage C et un jeu quivalent est fourni pour le langage FORTRAN Les routines FORTRAN ont les m mes arguments mais pass s par adresse Leur nom commence par la lettre f et ne contient pas de signe _ Les routines FORTRAN peuvent galement tre utilis es pour des programmes PASCAL en d clarant tous les arguments en var Dans tous les cas une donn e doit tre transmise entre Prolog et un langage externe Par cons quent l appel de la fonction de communication il est n cessaire de pr ciser le rang de l argument du pr dicat Prolog et la structure de la donn e externe associ e Puis selon le sens de communication demand il s agira de copier l argument Prolog dans la structure externe choisie ou bien il s agira de construire dans les piles de Prolog le terme repr sent par la structure externe et de l unifier avec l argument du pr dicat associ D autre part il peut arriver que la communication ne puisse pas se faire Il est alors n cessaire d en tre inform Les fonctions de communication ont pour cela un argument qui sert d indicateur Il est nul quand la fonction a pu tre r alis e strictement positif quand une erreur doit tre g n r e et gal 1 quand un backtracking doit tre provoqu ProloglA J Prolog INT RITA CIS LATE Extensions avec des langages externes R 7 3 Le syst me de gestion des erreurs de Prolog impose que le programme externe s
294. k de diff rents plats consomm s de mani re al atoire Il doit pour chacun pouvoir donner la quantit disponible et retrancher la quantit consomm e Il doit alerter le patron en cas de rupture de stock et ensuite pouvoir lister sur commande les plats renouveler Enfin il doit pouvoir enregistrer une livraison On d finit le nom du Service Fridge On d finit les noms des Topics Boss r serv au ma tre unique des lieux Waiter pour les serveurs de la salle Les Items seront les noms des plats associ s une quantit disponible dans une base de donn es interne Un Item nomm Rupture et accessible au seul patron lui permet de conna tre la liste des plats dont le stock est inf rieur 5 Le patron peut l interroger par Request et ou s y abonner Il recevra alors la liste jour chaque consommation d un serveur de la salle Seul le patron est autoris alimenter le Frigo par une requ te Execute passant une liste chiffr e Il a aussi acc s toutes les op rations permises aux serveurs de la salle ProloglA U4 14 Manuel d Utilisation Windows Le code de cet exemple est donn dans le fichier ddefrigo p2 du kit On remarque qu il est nettement plus volumineux que le pr c dent Pour l utiliser de mani re amusante il est pr f rable de disposer de plusieurs environ 3 applicatifs Clients pouvant utiliser facilement des Identifiants DDE arbitraires pour le cas o des instances de Prolog sont utilis e
295. keysort 43 31 52 12 L keysort 43 31 52 12 L mycompar kill array tabl kill module lex line width X list foo 2 list f00 2 4 list mymodule List of X data X L list _ string a b X list tuple aa bb cc x listing mymodule lkload my file my table val ln 1 0e0 0 0e0 val log 1 0e0 0 0e0 load myfile load myfile lt gt aa bb member 1 1 2 3 4 memory file non terminal memory file lexical 32000 val mod 7 3 41 month 5 may ms_err 104 X val mul add 3 1e0 0 077d0 5 X name toto X name X 116 111 116 111 new tlv V 33 foo next char next char X ProloglA Poole HER A nl nl h no_debug no_echo no_index i a no_ infinite no_paper no_spy i n no_trace nonvar t not not_defined 1 number t number_chars n 1 number _chars n 1 number_codes n 1 number_codes n 1 OPQ once t op n il i2 op n il i2 53 open s i v open s i v 1 or t1 t2 out I out_equ t outl t outm s outm s n outml s output s output u n output_is s page paper peek _byte n peek_byte h n peek_char c peek_char h 2c peek_code n peek_code h n phrase t1 t2 phrase t1 12 t3 predefined t prefix_limit c prologll prologllE Liste des directives et pr dicats pr d finies
296. kill module R 3 32 kill module R 7 18 kill module U 2 8 kill object U 5 14 kill_ window U 5 10 Label U 5 4 Index Prolog II Windows label U 5 17 left U 5 15 left attach U 5 13 lg_ buffer R 10 13 line R5 11 line width R 5 13 list R 3 14 28 29 Listbox U 5 5 listbox U 5 17 listing R 10 6 list_of R 2 8 list_string R 4 12 list_tuple R 4 12 Ikload R 6 5 Ikload R 7 27 InR4 6 load R 3 32 load R 6 5 load U2 8 log R 10 7 max arity R 10 19 member R 4 12 memory file R 5 1 memory file R 5 2 message box U 5 35 mod R 23 mod R 4 4 mod R 10 2 MODAL U5 8 modal U 5 8 mode R 10 13 module R 3 15 module U 2 7 month R 6 4 MPW U 5 37 ms_errR 6 5 mul R 4 4 ProloglA I 8 Index Prolog II Windows multifile R 3 28 multifile R 3 29 multiple U 5 15 name R 10 9 new check button U 5 14 new drawing area U 5 14 new_edit field U5 15 new_ goal R 8 3 new_label U5 15 new_listbox U 5 15 new_pattern R 8 8 new_popup menu U 5 16 new pulldown menu U 5 16 new_push_ button U 5 14 new radio button U 5 14 new _ scrollbar U 5 16 new tlv R2 14 new window U 5 7 next char R 5 4 next char R 5 4 next solution R 8 3 ni R 10 17 nonvar R 10 6 notR2 9 not R 10 14 not_defined R 3 29 no_border U 5 14 15 no debug R 6 18 no echoR 5 14 NO GOALR 8 2 no_index R 3 33 no_infinite R 2 11 no paperR 5
297. l ex cution un acc s quasi direct sur les faits ad quats I n est pas possible de supprimer l indexation install e sur des faits non compil s assert t q asserta t q Compiler et ajouter 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 identificateur ou un n uplet dont le premier argument est un identificateur 1 e lt ident arg argy gt ou ident arg argn ces deux notations tant quivalentes q doit tre une liste de termes ProloglA Prolog R3 22 Manuel de R f rence HERITAGE L effacement de assert t q compile la r gle t gt q et l ajoute au dessus du groupe de r gles ayant le m me nom que f c est dire au d but du paquet correspondant t Par exemple les deux commandes suivantes assert conc e x y e z conc x y z nil assert conc nil y y nil tap es dans cet ordre ont pour effet l ajout du programme conc nil y y gt conc e x y e z gt conc x y Z Ne permettent pas d ajouter des r gles qui contiennent des arbres infinis cependant cela peut tre fait avec la r gle pr d finie equations Voir 2 3 assert t q assertz t q Compiler et ajouter 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
298. l l ambigu t n est pas tr s g nante elle am ne cependant une extr me confusion dans le cas des modules une s quence de caract res alphanum riques situ e dans un module M1 peut ne pas repr senter la m me entit que celle d sign e par la m me s quence de caract res situ e dans un module M2 c est dire les entit s correspondantes ne sont pas unifiables Identificateur Un l ment de l ensemble des entit s non structur es dont la repr sentation externe r pond la syntaxe des identificateurs Repr sentation compl te d un identificateur La s quence de caract res qui repr sente de mani re unique et non ambigu une entit de type identificateur ind pendamment des conventions de lecture criture Par extension on parlera d identificateur complet pour d signer cette s quence de caract res Un identificateur complet est form par la mn concat nation des caract res d un pr fixe du caract re et d une abr viation d identificateur appel e identificateur abr g Famille d identificateurs On appellera famille p l ensemble de tous les identificateurs poss dant le pr fixe p Une famille pourra tre d sign e par la cha ne correspondant au pr fixe des identificateurs qu elle contient Ainsi sys out sys in appartiennent la famille sys De m me sys env files appartient la famille sys env peter appartient la famille Op ration de lecture criture Op ration associan
299. la fin d une s quence ne se terminant pas par nil le terme qui suit imm diatement cette marque est le dernier l ment de la s quence Cette marque ne peut tre le premier l ment d une s quence point e par D On a deux repr sentations quivalentes du terme 2 3 nil l une sous forme vectoris e la deuxi me tant de type paire point e ici une paire est repr sent e par 3 entr es Prolog fournit toujours les donn es sous la premi re forme qui est plus compacte la deuxi me tant surtout utile pour construire des listes dont la longueur n est pas connue au d but de la construction Le couple N 0 repr sente par convention l identificateur nil dans ce qui suit repr sente des valeurs ind finies forme compacte forme type paire point e D 1 gt D 1 terme 1 2 3 nil J T T E exemple Codage du terme 2 3 Hi x father x y nil PrologIA R7 14 Manuel de r f rence val tab 32 bits argument de type s quence codage des sous termes de l arg vers 3 Hi x vers father x y nil d but sous terme father x y lt entier repr sentant father gt 0 x E y d but sous terme 3 Hi x 3 0 r f rence vers ler lt de str_tab 0 x H 00 i 01 mt null 0 7 3 2 2 Identificateurs Dans la structure de tableaux un identificateur est cod par une cl notamment un entier dans le dictionnaire de Prolog Au moment de la transformation
300. lat Chapon farci DBG CALL viande Chapon farci DBG RECALL 2 plat Chapon farci DBG CALL poisson Chapon farci DBG L information sur le backtracking est RECALL 2 plat Chapon farci Le num ro de la r gle r essayer est not entre parenth se 2 Un point d arr t est mis au nouvel appel du but sur plat Chapon farci On a alors acc s sur cette autre alternative toutes les possibilit s offertes par l outil de mise au point Autre exemple si un point d arr t fixe est mis sur plat 1 le debugger s arr te sur toutes ses alternatives gt repas e Chapon farci d CALL repas v147 Chapon farci v284 DBG plat 1 ajoute le point d arr t DBG g go to spy CALL plat Chapon_farci DBG g RECALL 2 plat Chapon_farci DBG g e Artichauts Melanie d Sorbet_ aux poires e Artichauts Melanie d Fraises chantilly e Artichauts Melanie d Melon_en surprise CALL plat Chapon_farci DBG g RECALL 2 plat Chapon_farci DBG g Une erreur est g n r e par la machine ou par un pr dicat externe Les points d arr t ne sont pas modifi s Le message d erreur est affich m me si l erreur est r cup r e par un block ainsi que la branche de r solution au moment de l erreur Par exemple sur l ex cution suivante gt insert toto x y gt block x titi y outl x ProloglA HE GE L environnement R6 11 J Prolog ID WT A Je titi y
301. le et la d claration doit tre faite avant le d but de la session avant l appel de ProStart Si l argument est NULL les descripteurs seront supprim s dans la prochaine session Si la routine est invoqu e plusieurs fois c est le dernier tableau qui est pris en compte La routine retourne 0 en cas de succ s 1 en cas d chec session d j lanc e L exemple fourni avec la DLL utilise une fonction d clar e ainsi ProloglA J re f 407 Sp cificit s de Prolog II Windows U3 7 ConnectUserRule UserRuleFunction pfUR Cette routine permet de d clarer une fonction d aiguillage appartenant a l utilisateur p UR pour les extensions C utilisant la m thode des parasites Cette fonction jouera le r le de la fonction user_rule du module prouser c Le format de cette fonction type UserRuleFunction d fini dans le fichier des prototypes est impos c est le m me que celui de la fonction user_rule Si l argument est NULL la fonction d aiguillage couramment install e est supprim e Par s curit il est requis de supprimer la fonction courante avant d en installer une nouvelle La routine retourne 0 en cas de succ s 1 en cas d chec remplacement refus La gamme de num ros de parasites qui peuvent tre install s ainsi est celle qui correspondait aux extensions ordinaires 1 9999 Les m canismes relatifs aux autres gammes de num ros restent inchang s on peut par exemple appeler une fonction exter
302. le source La d finition d un module source consiste d finir un contexte de lecture criture pour le module une r gle facultative d initialisation du module les r gles du module proprement dites Le contexte sert pour la lecture du module source lorsqu il est compil Il sert galement pour l criture lors de la d compilation du module par les primitives list ou editm ProloglA Prolog INT RITA LI LITE Structuration et modification des r gles R3 15 La r gle d initialisation du module si elle existe est ex cut e automatiquement d s la fin de compilation du module avec le contexte courant d ex cution et non celui de lecture du module Cette r gle ou ce paquet de r gles est sans argument et a pour identificateur d acc s l identificateur ini module pr fix par le pr fixe du module Un module source se pr sente donc comme une suite de r gles comprises entre les deux d clarations sys module pr fixe des acc s sys end module pr fixe des acc s j Remarque si le module source n a pas t construit de cette fa on les r gles ont t compil es par des insert ou assert dans un ordre quelconque par exemple la primitive editm permet de le reconstruire sous cette forme Les d clarations module et end module sont destin es au mode insertion de r gles de Prolog cf insert paragraphe 3 6 Par cons quent les l ments Prolog compris entre ces deux d claratio
303. libre Dans ce dernier cas tous les objets sont concern s e est soit une variable libre dans ce cas tous les v nements sont concern s soit de la forme char c pour les edit field et les unit s fen tres ou zones de dessin GRAPHICS o c est le code du caract re click pour un bouton push check radio ou une scrollbar Aucun r sultat n est transmis simplement un succ s ou un chec click i m pour les menus ou les listbox o 7 est le num ro de l item d sign et m donne l tat des principales touches de modification m est la somme des valeurs 1 si la touche SHIFT est appuy e 2 si la touche CONTROLE est appuy e 32 s il s agit d un DO UBLE CLIC Remarque Un double clic souris sur un item va g n rer la s quence d v nements suivante click 1 0 click i 32 click_down x y m pour les fen tres GRAPHICS et FRAMEPANEL et les drawing area o x y sont les coordonn es du clic relatives l objet m donne l tat des principales touches de modification click_up x y m pour les unit s fen tres ou zones de dessin GRAPHICS ou x y sont les coordonn es du clic relatives l objet m donne l tat des principales touches de modification ProloglA J Prolog WIAA SAT S LAGE Primitives graphiques U5 21 Remarque Un double clic souris dans une unit graphique va g n rer la s quence d v nements suivante click down x y 0 click up x y 0 click_down x y
304. lle de la zone de caract res ProloglA R7 10 Manuel de r f rence LER J Prolog TOA NATE tr t E in_external_code est un bool en qui indique si la chaine est put_strterm ou doit tre get_strterm en code caract re externe ceci est utile lorsque l option caract res ISO est activ e et que l on utilise des caract res non pr sents dans la premiere moiti du jeu ISO voir Annexe E err indique si une erreur s est produite ou pas ou si un backtracking doit tre g n r Dans le cas du transfert de Prolog vers le langage externe la zone de caract res point e par value doit tre suffisamment grande pour contenir la cha ne r sultat Prolog transforme la mani re du pr dicat out l argument de rang no_arg en une cha ne qu il copie l adresse value Si la cha ne copier est plus grande que g max une erreur est signifi e Dans le cas du transfert du langage externe vers Prolog Prolog analyse la cha ne contenue dans value construit le terme Prolog qu elle repr sente la mani re du pr dicat in et l unifie avec l argument de rang no_arg Par exemple dans une r gle externe pour unifier le troisi me argument avec une liste de 5 entiers on crira put_strterm 3 1 2 3 4 5 0 amp err Voyons ci dessous un petit exemple d utilisation avec une partie en C a ajouter a Prolog et la partie Prolog qui le teste On suppose que le lien entre le pr dicat Prolog et la fonction C a t
305. lle en Ko r serv e pour la pile de r cursion et des variables locales t entier trail D finit la taille en Ko r serv e pour la pile de restauration variables restaurer apr s backtracking 2 4 Cr ation et ex cution d un programme Voici un exemple complet de cr ation et d ex cution d un programme d finissant une petite base de donn es d marrant avec l tat de base repr sente le caract re d invite du syst me gt celui de Prolog Par souci de concision la r gle insert a t utilis e directement sans appeler l diteur win prolog sous DOS PROLOG II PrologIA Prolog est lanc avec l tat initial les seules r gles ou programmes pr sentes en m moire sont les r gles pr d finies gt insert pere Jean Marie gt pere Jean Pierre gt A Ici le programme utilisateur est compil il est maintenant connu par Prolog gt pere x y Une ex cution de ce programme est lanc e x Jean y Marie x Jean y Pierre gt exit On sauve un nouvel tat binaire de d marrage contenant le programme utilisateur Bye Le fichier prolog po a maintenant t cr contenant un nouvel tat r gles pr d finies et votre programme Pour repartir avec l tat pr c dent relancer Prolog en donnant le nom de fichier correspondant ProloglA J Prolog LE RYT AVES CI LAGE Utilisation de Prolog II Windows U2 11 win prolog prolog po PROLOG II Pr
306. lors rien n est lu et in_integer choue Sinon f est unifi avec l entier qui a t lu Exemple gt in integer i in char c in integer j 123 456 i 123 c j 456 ATTENTION l criture des entiers et r els pouvant se faire sur plusieurs lignes l aide de lt return gt si l option d interpr tation du est active cf U2 3 si l objet en entr e n est pas un entier mais un r el crit sur plusieurs lignes Prolog ne peut pas restaurer les lignes pr c dant la derni re in_real t Lit d abord tous les caract res blancs puis essaie de lire un r el sur l unit courante Si l objet lu n a pas la syntaxe d finie par l option courante d un r el alors rien n est lu et in real choue Sinon est unifi avec le r el qui a t lu gt in real x in char c in real y 123e 4 54 63e0 x 1 230000000000000e 06 c y 5 463000000000000e 01 ATTENTION l criture des entiers et r els pouvant se faire sur plusieurs lignes l aide de lt return gt si l option d interpr tation du est active cf U2 3 si l objet en entr e n est pas un r el mais un entier crit sur plusieurs lignes Prolog ne peut pas restaurer les lignes pr c dant la derni re in_double t Identique in_real t in_string t Lit d abord tous les caract res blancs puis essaie de lire une chaine Prolog Si l objet n a pas la syntaxe d une cha ne alors rien n est lu et in string choue Sinon f est unif
307. ls directs en C C est un espace de travail pour le codage des arguments lors des appels directs de proc dures ou fonctions C par la primitive callC Taille par d faut 1 Ko Ces tailles par d faut peuvent tre modifi es individuellement par des options sur la ligne de commande ou dans le fichier prolog2 pre 2 3 Syntaxe de la ligne de commande Dans toutes les descriptions syntaxiques de ce manuel les l ments facultatifs sont mis entre crochets ceux qui peuvent appara tre un nombre quelconque de fois ventuellement aucune sont crits entre accolades ProloglA U2 4 Manuel d Utilisation Windows Il est possible de m moriser la commande de lancement de Prolog en l incluant dans un fichier nomm prolog2 pre qui peut se trouver dans le r pertoire courant ou dans le r pertoire d installation de Prolog En effet si un tel fichier existe Prolog traitera toutes les options de ce fichier ne figurant pas d j sur la ligne de commande qui a donc priorit Seule la premi re ligne est lue les autres lignes sont ignor es Le premier mot est aussi ignor nom du programme La syntaxe de la commande Prolog est win sous MS DOS prolog parametres etat_initial Le nom de fichier efat_initial donn dans la syntaxe du syst me h te d signe le fichier d tat avec lequel on souhaite d marrer la session Prolog Si rien n est sp cifi le nom initial po est pris par d faut Les param tres peuvent
308. lvestres X qui sont solution de Sj sont les r ponses notre probl me Le r sultat imprim par l ordinateur est alors une forme simplifi e du syst me Sj dans laquelle les in quations sont omises On peut galement montrer que Prolog II v rifie parfaitement si un syst me d quations et d in quations a au moins une solution D un point de vue plus pratique quand on lance Prolog on se trouve dans une boucle qui lit une suite de buts 70 f tn cherche les effacer de toutes les mani res possibles 70 gt gt Tj Sj avec Tj vide puis imprime les syst mes Sj correspondants L ordinateur crit le caract re gt quand il attend une suite de buts De la m me mani re que nous avions une contrainte sur les r gles nous avons la contrainte suivante sur les buts A chaque tape les arbres repr sentant le but qui va tre effac doivent avoir leur branche de gauche repr sent e par un identificateur Les parasites permettent l utilisation de sous programmes externes Pour expliquer comment ces sous programmes sont appel s il faut se r f rer la premi re des trois lignes qui d crit le m canisme de base de Prolog si g0 est un parasite alors au lieu d essayer d utiliser une r gle Prolog ex cute le sous programme correspondant Certains parasites apparaissent dans les r gles pr d finies qui font l interface entre des sous programmes externes et des r gles Prolog Cet ensemble de r gles pr d
309. lys e Voici le programme d finitif grammaire des expressions expression e lt x y gt gt somme e lt x y gt somme e lt x y gt gt produit p lt x z gt reste de somme p e lt z y gt produit p lt x y gt gt primaire f lt x z gt reste de produit f p lt Zz y gt primaire n lt x y gt gt mot n lt x y gt integer n primaire e lt x y gt gt mot lt X Z gt expression e lt z t gt mot lt t y gt reste de somme p e lt x y gt gt mot O lt x Z gt op_add o o a produit p lt z t gt reste de somme lt o a p p gt e lt t y gt reste de somme e e lt x x gt gt reste de produit f p lt x y gt gt mot O lt X Z gt op _mul o o m primaire f lt z t gt reste de produit lt o m f f gt p lt t y gt ProloglA J Prolog T FO A JT Quelques exemples de programmes Prolog II C 5 reste de produit f f lt x x gt gt mot a lt a x x gt gt op_add add gt op add sub gt op_mul mul gt lecture read l gt in_sentence s 1 lancement run gt outm l expression lire p analyse p e val e f outm vaut outl f analyse p e gt expression e lt p nil gt analyse p e gt outm est incorrecte fail Wont On utilise le pr dicat read qui lit une phrase termin e par et la transforme en une liste de mots Par exemple g
310. max La cha ne obtenue est la notation de l identificateur en fonction du contexte courant notation abr g e si possible La fonction donnera dans le param tre de sortie 1g la longueur effective de la cha ne La fonction retourne 0 si elle a pu s ex cuter un entier positif correspondant un num ro d erreur si une erreur s est produite NB key doit correspondre un identificateur valide int symbol string key str lg lg max long key char str int lg int 1g max integer 4 function fsymbolstring key str lg lg max integer 4 key lg max lg character str Le caract re choisi pour noter la s paration entre le pr fixe et le suffixe de la repr sentation d un identificateur complet peut tre modifi depuis Prolog La fonction suivante permet donc de conna tre le caract re courant utilis char prefix limit character 1 function fprefixlimit Les fonctions set permanent symbol et reset permanent symbol ou leur quivalent en Fortran permettent de pr venir le r cup rateur de m moire de Prolog dans le cas o il serait activ sur le dictionnaire qu un identificateur est utilis et respectivement non utilis par une proc dure externe NB key doit correspondre a un identificateur valide set_permanent_symbol key long key reset permanent symbol key long key integer 4 function fsetpermanentsymbol key integer 4 key integer 4 function fresetpermanentsymbol key integer 4 key
311. me temps que la case de fermeture est cliqu e print _window s print _window s f t Imprime le contenu de la fen tre de texte s avec la fonte f de taille t M mes conventions que gr text f 1 l Voir 5 5 Mode de dessin et d criture La forme avec un seul argument imprime la fen tre avec la fonte courante de la fen tre gr_print s gr_print s _rx _ry x0 y0 gr_print s r1 r2 Imprime le contenu de la fen tre graphique s On peut sp cifier grace la troisi me forme la zone imprimer qui est le contenu du rectangle r 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 rx et _ry compris entre 0e0 et 1e0 On peut donner en x0 et y0 la position de l origine de l impression sur le papier gt gr print graphic 0 5e0 0 5e0 0 0 imprimera la fen tre graphic r duite au quart chaque dimension tant r duite de moiti reset _window s Repositionne le pointeur de lecture au d but de la fen tre EDIT de nom s Echoue si s n est pas une fen tre EDIT cr e par new window ou create window Le point d criture reste toujours la fin du texte save _window s1 save _window s1 s2 Sauve le contenu de la fen tre de texte de nom s dans le fichier
312. menus il y a en plus de celles ci des primitives sp cifiques aux menus d crites au paragraphe 5 4 5 3 1 Cr ation destruction d objets L identification d un objet peut tre soit une cha ne soit un identificateur Prolog I soit quand elle est g n r e automatiquement par Prolog un entier Pour ce dernier cas il suffit d appeler le pr dicat de cr ation de l objet avec une variable libre la place de l identification la variable sera alors unifi e avec un entier attribu l objet qui permettra de l identifier par la suite Certains objets attendent un titre ou un texte il est d termin par une cha ne de caract res Prolog qui peut tre vide Une constante enti re est utilis e pour sp cifier la visibilit de l objet sa cr ation 0 signifie non visible 1 signifie visible Il est possible de modifier l attachement par d faut des objets l aide des attributs top_attach left_attach bottom_attach right_attach qui d finissent respec tivement l attachement de l objet au bord haut gauche bas droit ajouter dans la liste des options de cr ation Si l un des ou les deux attributs top_attach et bottom_attach est mentionn cela red finit l attachement vertical et ou si l un des ou les deux attributs eft_attach et right_attach est mentionn cela red finit l attachement horizontal Un programme Prolog peut tre li aux v nements s il en existe de l objet cr qui d s qu ils
313. module grammar 3 me exemple module lexicon 7 lexicon F pn verbo i adj grammar Singular plural pa E data pn Peter singular gt pn John singular gt verbo smiles singular gt adj data plural plural gt end_module lexicon Les mots entr s par l utilisateur seront lus avec le contexte d fini par set_context my_entry data PrologIA J Prolog WIAA SAT S LAGE Structuration et modification des r gles R3 17 On peut avec la notion de contexte de lecture du module red finir de mani re claire certaines des primitives utilis es l int rieur d un module module example example out out x gt nicer x y sys out y explain x gt out x TellSomethingAbout x end_module example Dans l exemple suivant la partie initialisation du module permet de rajouter la r gle pertinente du module en tant que r gle pr d finie Prolog et permettra de l appeler en utilisant l identificateur abr g si le contexte courant contient bien le module sys des r gles pr d finies module parser ini module gt assert sys parse x parse x nil nil add_implicit sys parse parse 11 12 gt sentence 11 12 end_module parser 3 5 3 Module Objet La manipulation de modules objets concerne des repr sentations internes la notion de contexte n intervient donc pas dans ces op rations Le c
314. motif lui m me src ou bien partie de son inverse notSrc Pour les machines couleur la partie blanche du motif correspond la partie couleur du fond la partie noire du motif correspond la partie couleur du crayon la d termination de la couleur inverse est d pendante de la machine Voici les valeurs de m pour les diff rents modes m m modes d application 0 srcCopy srcCopy 1 srcOr srcOr 2 srcXor srcXor 3 srcBic srcBic 4 motSrcCopy notSrcCopy 5 snotSrcOr notSrcOr 6 snotSrcXor notSrcXor 7 notSrcBic notSrcBic Remarque la forme enti re est moins explicite que la forme identificateur Dans les primitives d interrogation de la configuration gr get mode l x Prolog retourne les valeurs sous forme d identificateur ProloglA Prolog U5 28 Manuel d Utilisation Windows ERITAGE s gr_get mode b m Renseigne sur le mode d application du motif dans l unit graphique courante b m ont la m me signification que dans gr_mode b m Prolog retourne le mode comme un identificateur or text fts Permet de d finir la fonte la taille et le style des sorties dans l unit graphique courante f num ro de la fonte t taille de la fonte s liste de num ros de style 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 vide repr sente le texte
315. mp mem gt end amp err if err free mem return 253 mem gt direction mem gt start gt mem send 1 1 mem gt current mem gt start store C backtrack data mem on r cup re l adresse des donn es qui a t m moris e call 1 mem EnumMemory restore C backtrack data instantiation du premier argument du pr dicat ProloglA 7 esha ITA J Prolog LIE PIT AZT AEN AGE Extensions avec des langages externes R 7 25 put_integer 1 mem gt current amp err if mem gt current mem gt end c est fini il faut lib rer free mem return SUCCESS END OF C BACKTRACK else on incr mente le compteur mem gt current mem gt direction return err Il faut maintenant compiler le fichier ci dessus faire l dition de liens voir le manuel d utilisation 2 8 puis activer le nouveau Prolog pour obtenir Prolog II gt sys reverse 0123456 x x 6543210 gt sys enumerate x 2 2 x 2 x 1 x 0 x 1 x 2 Vs 7 1 Ajout de fonctions externes appel direct Les fonctions externes appel direct contrairement aux autres fonctions externes accessibles par la m thode des descripteurs sont des fonctions qui n ont pas d interface C pour le passage des param tres Une telle fonction C peut tre crite avec ses param tres comme si elle devait tre appel e par un programme C classique En particulier cela peut tre une fon
316. n e clos par une directive sp ciale close_context_dictionary 1 et qui ne peut tre modifi que par des primitives ad hoc add_implicit 2 remove_implicit 2 ProloglA Prolog R3 10 Manuel de R f rence HERITAGE Famille sys in others out DE sous ensemble clos utilis pour les d finitions implicites des contextes Dans toute op ration de contexte concernant une suite d identificateurs d sign s implicitement par leur pr fixe l ensemble concern est le sous ensemble clos si la famille est ferm e pour le contexte l ensemble de tous les identificateurs de la famille sinon Cet ensemble est constitu de tous les identificateurs ayant apparu dans l historique du programme avec le pr fixe en question Un exemple de famille d identificateurs ferm e pour le contexte est la famille sys Le sous ensemble clos contient l ensemble des identificateurs des r gles et des fonctions pr d finies de Prolog II Nous appellerons contexte sain un contexte ot toutes les suites implicites sont ferm es pour le contexte Un contexte sain garantit que les op rations de lecture et d criture sont r p tables et r versibles Un exemple permettra de mieux comprendre ces notions Soit le contexte abstrait suivant m1 out m2 peter sys a b La lecture de l identificateur abr g out donnera ml out puisque le premier identificateur de la suite explicite a la m me abr viation La lecture de l ident
317. n aura aucun effet Fait toujours un succ s 10 4 Op rations pr d finies sur les donn es 10 4 1 Les tests de type atom X Succ s si X est un identificateur sinon chec Equivalent ident X atomic X Succ s si X est une constante sinon chec compound X Succ s si X est une liste ou un n uplet sinon chec float X Est quivalent a real X nonvar X Est quivalent bound X number X Succ s si_X est un entier ou un r el sinon chec var X Succ s si X est une variable libre sinon chec Est quivalent free X ProloglA Prolog IT RITA LI LITE Extensions Edinburgh R10 7 10 4 2 Les op rations arithm tiques L valuation d une expression est faite au moyen de la r gle pr d finie val Certaines expressions peuvent tre utilis es en syntaxe Edinburgh directement comme des termes a effacer Les termes suivants peuvent tre effac s sans l interm diaire du pr dicat val X You X Y Est quivalent val eql X Y 1 X You X Y Est quivalent val X Y 1 X lt You lt X Y X lt You lt X Y X gt You gt X Y X gt You gt X Y Sont respectivement quivalents a val lt X Y 1 val lt X Y 1 val gt X Y 1 val gt X Y 1 X is Y ou is X Y Est quivalent val Y X Les fonctions suivantes sont sp cifiques au mode Edinburgh Elles sont valuables par les r
318. n dans le code se fait de point d arr t en point d arr t Trois granularit s de progression sont possibles On les utilisera en fonction de la proximit de l erreur ou du type d information que l on veut extraire d une partie du programme Les progressions possibles partir d un point d arr t sont ler cas on connait l endroit du programme qui fait d faut on veut y aller directement et rapidement R ponse go to spy aller jusqu au prochain point d arr t fixe qui peut se trouver n importe o dans le code gt on veut voi x cuti ion u niveau 2 me cas on veut voir de pr s l ex cution de la fonction sans descendre au nivea bas de ses sous programmes R ponse next aller jusqu au prochain but de m me niveau ou de niveau sup rieur On ne s int resse pas aux niveaux inf rieurs c est dire que l on ignore le corps du but courant 3 me cas on veut voir exactement toute l ex cution de la fonction sans oublier aucune instruction R ponse step aller jusqu au prochain but ID finition du niveau d un but on dira qu un but de la question est de niveau 0 Si un but est de niveau n les buts apparaissant dans la queue de sa r gle sont tous du m me niveau gal n 1 ProloglA 7 Prolog WTA SAT S LAGE L environnement R6 9 Sch matisons sur notre exemple de menu les progressions possibles par next et step repas e e hors d oeuvre plat dessert step ep xt D viand
319. n echouee exit err ma terminaison prolog condition int condition if mon erreur condition mon message erreur condition ProFinal 0 else ProFinal condition L utilisation de la machine Prolog dans une application est d limit e par l appel aux fonctions ProStart et ProFinal 8 3 Empilement d un but Prolog L empilement d un but _b se fait a travers l appel d une r gle relais exec _b _s qui garantit la conservation du but en cours et l arr t dans un tat pr cis Cette r gle a deux arguments le premier est un terme repr sentant le but _b effacer le deuxi me est le terme qui sera obtenu en solution c est en g n ral la liste des variables int ressantes du but _b ProloglA U3 6 Manuel d Utilisation Windows Re Puly Lorsqu on a appel new_goal l appel exec _b _s est pr t tre ex cut Il suffit donc d utiliser les routines standard pour instancier les arguments put_term 1 pour instancier _b et put_term 2 pour d finir les variables correspondant la solution int ressante L appel de la fonction next solution provoque la transition de la machine Prolog vers un des tats 1 4 ou 5 La valeur retourn e par la fonction est l tat atteint NO GOAL 1 ERROR gt 0 ou SOLUTION EXISTS 0 La r gle relais est l quivalent de exec _b s gt block _e b condition _e k point_arretl _k s fail exec _b s gt point arret2 NO GOAL nil c
320. n et l ensemble de ses variables Xl Xm Trouver toutes les affectations sylvestres X x r xm 7m qui sont telles que les arbres t1 X tn X soient des assertions Pour r soudre ce probl me l ordinateur doit produire toutes les d rivations de la forme To SQ gt T1 1 gt 72 S2 gt Les Ti tant des suites de termes appel s buts et les Sj tant des syst mes d quations et d in quations ayant au moins une solution SQ est le syst me vide On peut expliquer simplement la d rivation Ti Sj gt Ti 1 Si 1 au moyen des trois lignes suivantes 1 40q1 qn 5 2 p0O p1 pm 3 p1 pPmgl1 qn S U q0 p0 PrologIA J Prolog LIE PIT AZT AEN AGE El ments de base R1 19 La premi re ligne repr sente la forme que doit avoir le couple 7 Sj la seconde la r gle utilis e et la troisi me le r sultat 75 1 Sj 1 Avant d utiliser une r gle il est n cessaire de renommer ses variables pour qu aucune d entre elles n apparaisse dans Ti Si Il est aussi n cessaire de v rifier que le nouveau syst me Sj qui est obtenu en ajoutant l quation q0 po Si poss de au moins une solution Traditionnellement cette v rification est appel e unification de q0 avec po Le but des d rivations pr c dentes est de trouver un couple 7j Sj pour lequel la suite Tj est vide ce couple est donc d rivable de 70 On peut montrer que les affectations sy
321. n7 n8 n9 n10 n11 n12 arg n t1 t2 arg2 n t1 t2 assert t assert t1 t2 assert t1 12 asserta t asserta t1 t2 assertn t1 t2 n assertz t1 12 assertz t assign i t atan m atom t atomic t atom_chars i 1 atom_chars i l atom_codes i 1 atom_codes i 1 atom_concat il i2 i atom_concat il i2 l atom_length i n at_end of stream at_end_ of stream h B bagof v t 1 beep block t1 t2 block t1 12 t3 block _exit t block _exit tl t2 bound t arg 0 lt gt aa bb aa arg2 2 lt gt aa bb bb assert brother jean paul assert pp X qq X rr X assert pp X qq X rr X asserta brother jean paul asserta pp X qq X rr X assertn pp x qq X rr X 2 assertz pp x qq X rr X assertz brother X Y son X Z son Y Z assign fo tt 3 1 2 x tab 5 str val atan 1 X atom foo atomic 1 atom_chars foo X atom chars X a b atom codes foo X atom codes X 65 66 atom concat X Y foo atom concat fol fo2 X atom length foo X at end of stream alias1 bagof X frere X Y L block edit call_editor block edit info call_editor block_exit edit block exit edit this error bound X PrologIA Poole HER A C call t callC t1 callC t1 t2 catch t1 712 13 ch
322. nc o c est le caract re tap et chaque v nement de gain ou perte de focus le but b o est lanc est une liste d options ventuellement vide nil form e partir des identificateurs multiple si le champ peut comporter plusieurs lignes chscroll pour avoir une barre de d filement horizontale vscroll pour avoir une barre de d filement verticale lt chars_nb n gt si le champ est limit n caract res n entier top_attach left_attach right_attach bottom_attach Par d faut l editfield est monoligne sans barre de d filement et le nombre de caracteres est limit a 1024 new_label o p v s lt x1 y1 x2 y2 gt l Cr e un label identifi par o dont le texte est s inscrit dans un rectangle de coordonn es x y1 x2 y2 dans la fen tre parente p Il sera visible selon la valeur de v Six2 et y2 sont libres ils seront alors unifi s avec les coordonn es effectives du coin inf rieur droit de l objet apr s cr ation est une liste d options ventuellement vide nil form e a partir des identificateurs cleft si le texte doit tre cadr a gauche dans le rectangle cright si le texte doit tre cadr droite dans le rectangle no_border sile texte ne doit pas tre encadr top_attach left_attach right_attach bottom_attach Pour obtenir un texte centr il faut les deux attibuts eff et right Par d faut le texte est encadr et son alignement est d pendant du syst me
323. ncernant les fonctions appel direct c est dire qui ne n cessitent pas d interface C pour le passage d arguments la transformation des donn es se fait en C ou en Fortran dans les autres cas Pour tendre Prolog avec certains types de donn es qui seront alors partag es entre Prolog et C il suffira de cr er un lien entre le terme Prolog et la donn e externe par la m thode des descripteurs ProloglA Prolog R7 2 Manuel de r f rence HERITAGE Nous d buterons ce chapitre par la description des fonctions de communication de termes dans le cas ou la r cup ration et l affectation de la valeur des termes se font en C ou en Fortran En effet ces fonctions sont utiles dans de nombreux cas Nous exposerons ensuite comment faire le lien avec des objets externes par la m thode des descripteurs Nous terminerons en d taillant les possibilit s offertes par cette m thode 7 1 Principes des fonctions de communication de donn es Nous allons d crire dans les paragraphes 7 2 et 7 3 suivants les fonctions de communication qui sont utilisables lorsque dans une proc dure d un langage externe il est n cessaire de connaitre la valeur d un argument du pr dicat Prolog li a la proc dure ou bien de lui affecter une valeur Nous donnons ici quelques principes de fonctionnement communs toutes ces fonctions Etant donn les diff rences de conventions entre langages en ce qui concerne le passage d argument un
324. nction C Nous montrons ici des exemples avec divers types d arguments utilisant des fonctions d clar es par l utilisateur et une fonction syst me include lt stdio h gt include lt string h gt include proext h define REAL double define INTEGER long static REAL complete example iil iol ril rol sil sol tiil tril tiol trol tsil tsol reserved INTEGER iil iol REAL ril rol char sil char sol ProloglA Manuel de r f rence REAL tril REAL trol HERITAGE Prolog INTEGER tiol tiil char tsil tsol int reserved int i printf iil d n iil integer in input printf iol d n iol integer in output printf ril g n ril real in input printf rol g n rol real in output printf sil s n sil string in input printf sol s n sol string in output for i 0 i lt 2 i integer array printf tiil d d n i tiil i in input for i 0 i lt 2 i real array printf tril d g n i tril i in input for i 0 i lt 3 i integer array printf tiol d d n i tiol i in output for i 0 tsil i i string array printf tsil d s n i tsil i in input for i 0 i lt 3 i real array printf trol d g n 1i trol i in output io1 3333 integer in output rol 8888 real in output strcepy sol bonjour string in out
325. ndiquant l endroit o est affich le dialogue Ltypes 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 Exemple TEXT APPL nil s lectionne tous les fichiers de type texte seul ou application Filter est une proc dure de filtrage pour l acceptation des fichiers s lectionn s Ce doit tre nil pour l instant S 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 T est le type du fichier cha ne de 4 caract res 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 une zone de dialogue permettant de choisir un nom de fichier a cr er 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 sfputfile Point Prompt NomInitial s Affiche une zone de dialogue permettant l utilisateur de choisir un nom un volume et un r pertoire pour un fichier Le nom du fichier se saisit au clavier dans une zone d dition qui est initialis e avec la cha ne ventuellement vide Nominitial qui doit tre un nom de fichier sans chemin Si l utilisateur tape un nom de fichier d j existant une alerte le pr vient Le fichier n est ni cr ni ouvert s est
326. ne crite en mode 16 bits de la m me fa on qu avec la version standard de d veloppement DLL 16 bits ConnectInString InStringFunction pfIS Cette routine permet de compl ter la DLL en y ajoutant les entr es par la d claration d une fonction d entr e de texte pf1S laquelle Prolog soumettra toutes les entr es pr dicats avant l installation d une telle fonction une cha ne vide est rendue pour chaque demande d entr e rendant donc celle ci impossible Le remplacement et la suppression de cette fonction fonctionnent comme la pr c dente Le format de cette fonction type nStringFunction d fini dans le fichier des prototypes est impos son premier argument est l adresse d un buffer pr t recevoir le texte donc allou son second argument est la capacit maximale de ce buffer Le code de retour de la fonction est ignor en cas d erreur elle doit rendre une cha ne vide dans le buffer Int rieurement la fonction peut effectuer toute op ration m me bloquante en traitant les v nements n cessaire pour obtenir le texte retourner ConnectOutString OutStringFunction pfOS Cette routine permet de compl ter la DLL en y ajoutant les sorties par la d claration d une fonction de sortie de texte pfOS a laquelle Prolog soumettra toutes les sorties pr dicats messages avant l installation d une telle fonction aucune sortie ne peut tre visible Le remplacement et la suppression de cette fonction
327. nent z ro lorsqu une erreur s est produite ou une valeur non nulle lorsqu il n y a pas eu d erreur get_max_ string copie la cha ne de caract res originale depuis la m moire de travail de Prolog dans une zone d finie dans le programme externe point e par value d une taille de g max caract res Un caract re nul indique la fin de la cha ne Une erreur est provoqu e si la taille de la zone de caract res d finie par g max est insuffisante pour la cha ne r cup rer get_string fait la m me chose que get max string mais ne fait pas de test de d bordement Le tableau point par value doit donc avoir une taille suffisante pour contenir la cha ne Pour viter les risques d crasement m moire il est pr f rable d utiliser get max string 7 2 3 Transfert de donn es simples d un langage externe vers Prolog Ces fonctions sont appel es par le programme externe pour unifier une valeur avec un argument du pr dicat Prolog associ Si l unification choue un backtracking est annonc par la fonction de communication Si le type de l argument effectif n est pas celui attendu ou bien s il n existe pas d argument du rang demand la fonction de communication notifie une erreur en affectant l indicateur err une valeur non nulle ProloglA fs A Prolog TA NAT tr t E 2 TDIT E GE Extensions avec des langages externes R 7 7 Poole oo Attention Pour un comportement correct du syst me de gestion des erreurs
328. nibles sous Window3 sous OS 2 PM et sous Motif Elles ne sont pas encore impl ment es sur Macintosh l La partie graphique ProloglII sous l environnement Motif a t d velopp e en collaboration avec Digital Equipment Corporation Prolog U5 2 Manuel d Utilisation Windows HERITAGE Vous ne devez pas utiliser les r gles marqu es donc sp cifiques une machine ou un environnement graphique si vous d sirez porter vos programmes sur d autres configurations 5 1 Description du syst me graphique Ce chapitre d crit une biblioth que de primitives pour la r alisation d interfaces graphiques Il suppose du lecteur une certaine pratique des environnements multi fen tres et de leur bo te outils Plus pr cis ment il suppose du lecteur la connaissance des caract ristiques de l environnement graphique de la machine h te En effet l aspect g n ral du graphique ou le comportement des fen tres et des objets graphiques ainsi que le maniement de la souris sont standard l environnement h te pour toute information sur ce fonctionnement se r f rer au manuel correspondant 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 5 1 1 Ev nements Les v nements sont les cons quences d interruptions mat rielles
329. nitialement au d but de la fen tre ensuite apr s la derni re position lue Noter que si une lecture est demand e Prolog copie dans un tampon toute une ligne Ces fen tres ont une capacit limit e certaines manipulations ayant pour effet l augmentation de la taille du texte au dela de la limite seront ignor es Les fen tres FRAMEPANEL ce sont des fen tres vides dont le seul r le est d accueillir des objets Elles ne poss dent pas de partie dessinable ditable Les fen tres GRAPHICS ce sont des fen tres destin es au dessin sensibles aux actions clavier et souris qui peuvent ventuellement recevoir des objets Elles peuvent contenir du texte par les moyens classiques d criture Par d faut l image bitmap n est pas sauvegard e ce qui veut dire que le rafra chissement n est pas assur Elles peuvent tre dot es d un bitmap qui permettrait leur retra age automatique Il existe toujours par compatibilit le type MODAL qui est un sous ensemble du type GRAPHICS et qui d signe les fen tres GRAPHICS qui ont l attribut MODAL attribut qui donne le focus la fen tre restreint les v nements utilisateur cette seule fen tre et donc rend la saisie obligatoire dans cette fen tre Par convention les primitives qui n ont d effet que dans un objet GRAPHICS sont pr fix es par gr Les fen tres TTY ce sont des fen tres de texte qui fonctionnent en criture et en lecture toujours la fin de la f
330. nn e lien ti de ou la r siliation de ce m me abonnement information que le Serveur est suppos enregistrer pour adapter son comportement futur ddeHotLinkData _tItem ddeOpen ou ddeHotLinkData _tltem ddeClose notifie une requ te Advise standard pour la donn e nomm e par la cha ne tem demandant un abonnement de type mise jour syst matique cette donn e lien chaud ou la r siliation de ce m me abonnement information que le Serveur est suppos enregistrer pour adapter son comportement futur ddePokeData _tltem _xValue notifie une requ te Poke standard pour l Item nomm par la cha ne _tItem adressant ainsi la donn e _xValue cha ne de texte Prolog au Serveur ou bien encore un simple signal sans donn e jointe xValue valant alors nil ddeExecute _xArgument notifie une requ te Execute standard au Serveur lui passant une commande textuelle pr convenue contenue dans la cha ne _xArgument que le Serveur est suppos comprendre et ex cuter de mani re synchrone et dont le statut doit conditionner le succ s de ce but ddeClose notifie la d connexion du Client La base de donn e interne est mise jour automatiquement et le Serveur est suppos faire de m me pour ses donn es propres ventuelles Il s agit d une notification post riori et le statut de terminaison du but est sans effet Exemple Imaginons un Serveur repr sentant le garde manger d un restaurant Il doit g rer le stoc
331. nombre d l ments valides du tableau prendre en compte pour le retour dont l l ment valeur_initiale est la liste Prolog termin e par nil des valeurs initiales des l ments du tableau Le type de ces l ments d termine le type du param tre dont l l ment variable r sultat sera unifi avec le r sultat liste Prolog termin e par nil d entiers ou de r els Par exemple relaiProlog lt 2 4 6 8 12 x 1 5 gt lt 0e0 nil y 5 5 gt est quivalent aux instructions C suivantes long argl 2 4 5 6 8 12 double arg2 5 arg2 0 0 0 fonctionC argl arg2 suivies des affectations des variables x et y avec les nouvelles valeurs de arg1 et arg2 Pour un tableau de cha nes de caract res il est n cessaire d avoir une zone de pointeurs pour repr senter le tableau dont on doit d finir le nombre d l ments et ventuellement une zone de caract res pour stocker tous les caract res de toutes les cha nes du tableau dont on doit galement d finir la taille ProloglA J Prolog TA NAT LITE HERITAGE Extensions avec des langages externes R 7 31 7 Prolog LE RIT AE TT l argument effectif du pr dicat Prolog est un quadruplet lt valeur_initiale variable r sultat nbre max de caract res taille tableau gt dont l argument faille tableau est un entier sp cifiant le nombre d l ments de la zone allouer pour l op ration dont l adresse est transmise la fonction C La fin du t
332. nombre s lectionne la fonction externe ad quate voir la fonction user rule dans le module prouser Pour chaque nombre il y a un appel de fonction externe correspondant dans la fonction C user rule ou la fonction Fortran fuserrule Note inportante Les nombres inf rieurs 250 sont r serv s au syst me mais aucune v rification n est faite Les nombres sup rieurs 250 sont disponibles pour l utilisateur Il est conseill d utiliser les nombres compris entre 250 et 9999 pour les routines C dont l appel se trouve dans le module prouser les nombres compris entre 10000 et 20000 pour les routines Fortran ou d autres langages de type Fortran dont l appel se trouve dans le module fprouser et les nombres sup rieurs 20000 pour les routines du mode 16 bits sous DOS WINDOWS3 dont l appel se trouve dans le module prowuser D 3 Appel du programme externe Un programme externe ne peut tre appel depuis Prolog par la m thode des parasites que si le nombre associ et l instruction d appel ont t ajout s dans la fonction user rule du module C prouser respectivement fuserrule du module Fortarn fprouser ProloglA Annexe D HERI A Prolog TAGE Voici un extrait du texte de la fonction C user_rule user rule nb err err nb int nb err err nb err nb 0 if num gt 10000 fuserrule amp nb err err nb else if num gt 20000 real_mode_user_rule nb err err_nb else switch nb case 201 f
333. ns doivent tre des r gles ou des commentaires qui sont ignor s La d claration module annonce la d finition d un module et la d claration end_ module termine cette d finition L argument cha ne Prolog d signant le pr fixe des acc s dans la d claration module doit tre le m me que celui figurant dans la d claration end module et toutes les r gles comprises entre ces deux d clarations doivent avoir un identificateur d acc s avec ce pr fixe cette contrainte permet de contr ler des erreurs de nommage la lecture Na vement on peut dire que la d claration module signifie les r gles qui suivent sont ins rer 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 La forme compl te de la d claration module inclut la d finition du contexte de lecture du module voir la description des contextes 3 4 sys module pr fixe des acc s suite explicite suite implicite pr fixe par d faut Lorsque tous les arguments ne sont pas donn s on a les d fauts suivants on supposera dans ce qui suit que le contexte de lecture de la d claration sys module permet de l abr ger module p lt module p s lt gt module p sys p gt module p s sys p 2Dans le cas o des modifications sont apport es au module c est dire une partie du module est recompil e par reinsert ou insertz ou recharg e par
334. nses reponse a tout gt question i q element y q line outm gt out y line element x ens x t p gt type x t vrai p 8 listes des questions question 1 ens x ville habite_a mimosa x gt outm 1 dans quelle ville habite mimosa question 2 ens x booleen lunette olive x gt outm 2 olive porte t elle des lunettes question 3 ens x ville existe y nom et habite_a y x et est_age de y a et inferieur a 20 lunette y oui gt outm 3 quelles sont les villes ayant au moins un habitant outm age de moins de 20 ans et portant des lunettes Un casse t te Dans cet exemple il s agit de r soudre le c l bre probleme de crypto arithm tique dans lequel en rempla ant chaque occurrence des lettres s e n d m 0 r y par un m me chiffre on ait SEND Une programmation conventionnelle oblige prendre en compte deux probl mes simultan ment celui de l addition proprement dite et le fait que deux lettres diff rentes sont remplac es par deux chiffres diff rents Au contraire avec le dif retard ces deux probl mes sont bien s par s le pr dicat differents met en place toutes les in quations l avance On n a plus ensuite qu exprimer l addition et les dif se d bloquent progressivement au fur et mesure que l on avance dans la r solution du probl me Le programme est rendu plus clair mais aussi plus efficace Voici la solution
335. nsid r comme un non terminal repr sentant une r gle de r criture La r gle pr d finie phrase 2 ou phrase 3 permet d analyser ou de synth tiser les cha nes grammaticales d finies par cette grammaire voir 10 2 Pour traduire la r gle de grammaire en r gle Prolog Prolog appellera le pr dicat term _expansion 2 s il a t d fini sinon il utilisera son propre programme de transformation Il est ainsi possible de r aliser automatiquement des transformations sur les termes de la forme A gt B Si l on d sire d finir un programme de transformation il doit d finir la r gle suivante term_expansion X Y Lors de l appel X est le terme que Prolog vient de lire et Y est une variable libre X est de la forme A gt B Apr s appel Y doit repr senter la r gle Prolog qui doit tre associ e la r gle de r criture X c est dire la r gle Prolog qui sera assert e Voici deux exemples de compilation et d interrogation d une grammaire DCG user somme Z gt chiffre Z somme X Y gt chiffre X somme Y chiffre 1 gt 1 chiffre 9 gt 9 list somme _53 54 55 chiffre 53 54 55 somme 57 58 54 55 chiffre 57 54 4 _59 somme _58 59 55 chiffre 1 1 54 54 chiffre 9 9 54 54 phrase somme Z 1 2 3 Z 1 2 3 phrase somme 1 2 9 L L 1 47 92 74 ngn ProloglA
336. nt donn es en pixels Par exemple si une fen tre est cr e par l appel suivant gt create _window mywindow GRAPHICS 1 mywindow lt 0 1E0 0 1E0 0 6E0 0 7E0 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 Autre exemple gt create window ww GRAPHICS 1 mywindow lt le 1 1e 1 5e 1 5e 1 ProloglA U5 10 Manuel d Utilisation Windows kill_window s D truit la fen tre de nom s Le nom s ne peut pas tre celui d une fen tre pr d finie ce doit tre une fen tre cr e par new_window ou create_window Si la fen tre d truite tait l entr e ou la sortie courante l unit d entr e ou de sortie pr c demment active redevient l unit courante d entr e ou de sortie Si la fen tre d truite tait la fen tre graphique courante c est la fen tre pr d finie graphic qui redevient l unit graphique courante Voir aussi le pr dicat kill_object 5 2 2 Configuration manipulation d une fen tre clear_window s Efface le contenu de la fen tre de nom s Ne modifie pas ses objets ventuels et ne supprime pas les v nements li s la fen tre qui pouvaient tre dans la queue Prolog Est valable pour tout type de fen tre Sans effet sur une fen tre FRAMEPANEL file window s1 file window s1 s2 Cr ent si elle n existe pas d j une fen tre EDIT de nom s2 in
337. nta magenta 8 purple violet 9 cyan cyan 10 yellow jaune 11 lightGrey gris clair 12 darkGrey gris fonc 13 black noir 14 defaultColor couleur syst me 15 customColor couleur utilisateur d finie par gr colors Remarque la forme enti re est moins explicite que la forme identificateur Dans les primitives d interrogation de la configuration gef_attribute ob1 background x Prolog retourne les valeurs sous forme d identificateur gr_choosecolor p s i f Affiche le dialogue de s lection de couleur au point p de la forme lt x y gt de l cran s est une cha ne qui sera affich e dans le dialogue i et f sont des triplets d entiers compris entre 0 et 65535 un triplet lt r v b gt repr sentant 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 sur le bouton Annuler gr_pen l m gr_pen l h m D finit la taille en pixels du crayon de l unit graphique courante et son motif l largeur h hauteur m motif est un entier ou un identificateur m m motif 0 clear trame du fond l solid trame pleine 2 halfPattern trame demi teinte 3 lightPattern trame claire 4 darkPattern trame fonc e Remarque la forme enti re est moins explicite que la forme identificateur Dans les primitives d interrogation de la configuration gr_get_pen l h m
338. ntant dun RO 8 1 El ments d basent nlebiiieeniasmunlacnil R1 1 Kile Not ti ns US CES carnea eaaa R1 1 iD gt GU de caractere Soan ie aE R eee E ais ee R1 2 IE LES VARIE a a re R1 3 LAS CONS ames wot nn acute dal are aaa Nas R1 5 LS Termes et arbres ans a ne tone hat R1 9 TSG LISS HOPCT APC UN Si cs Feeders enr nn R1 15 1 7 Les r gles et les ASSELliONS ME Rs en no R1 16 1 8 Les m canismes de base de Prolog R1 18 1 9 La syntaxe compl te de Prolog R 1 20 ProloglA Manuel de R f rence 1 9 1 Le niveau SV NtARIGUE Le naiss R1 21 1 9 2 MSS G ANTS ene ns de Rel 22 1 93 Woe mivean Lexical sn uen nie S Ni R 1 24 LOIA ES CAPAC RETO tia aw ides a tt Anse R 1 26 1 9 5 Les caract res ACCUS ossste tentes R1 27 1 10 Le MacTOPrOCESSOUL ru dre casa castacenssecee cence se R 1 29 2 Le COMELOIE cpcctisisvansssesesotaspanvesguacoesuseavensntaunseindbaysounsacoeossaravoosnaecusetns R2 1 Dal Te COME ONG rs ant nn anis n a R2 1 DD OT css rase terre els dass h fn latest R2 9 2 3 A propos des arbres infinis 55 nn ed Tete R2 11 2 4 Quelques conseils pour la programmation r cursive R2 12 25 Les ICT SITUCURRS EN canes apes tata nn Ten R2 14 DE cle CRAN a RS ect ne R2 14 2 5 2 R CUP RATION CM he ei Ue en R2 15 2 5 3 Unification NOTE NES ce R2 15 2 34 SSOTUES LM E tente santa R2 16 Se RER OMID IE RSR ne OY Pr A rR EE R2 16 3 Structuration des r gles sesssoesssessssesssocssoco
339. nu g n rale de Prolog est identifi e par prolog Pour conna tre les identifications de ses menus il faut effacer sys get objects prolog l qui en rendra la liste clear _menubar Efface la barre de menus standard Cette primitive permet la red finition compl te de la barre de menus clear menubar s Efface la barre de menus de la fen tre s ProloglA U5 22 J Prolog CP WT JT LITE Manuel d Utilisation Windows restore_sysmenus s f Ajoute dans la barre de menus de la fen tre s les menus pr d finis File et Edit en unifiant leur nom avec fet e La variable reste libre si le menu n existe pas sur la machine h te save _menubar M morise la barre de menus courante Cette r gle ne peut tre appel e qu une fois restore_menubar Restaure la barre de menus sauv e avec save_menubar s Initialise la barre de menus de Prolog avec les menus g n raux add_stdmenu s Cette primitive permet de r ins rer un ou plusieurs menus standard apr s un appel a clear_menubar s doit tre l une des chaines suivantes apple pour reins rer le menu pomme file pour reins rer le menu Fichier edit pour reins rer le menu Editer find pour reins rer le menu Recherche control pour reins rer le menu Contr le window pour reins rer le menu Fen tres 5 4 2 Description d un menu set_menu u c v Permet de d finir ou red finir par v la valeur de l item indiqu par c dans l
340. o d finie au 2 me niveau de compilation a t prise en compte dans le premier niveau 1 44 gt insert Ici on d marre une nouvelle compilation rg macrol gt rg macro2 gt gt rg I I macro1 Les d finitions ont bien t annul es I macro2 NB Une macro apparaissant comme op rande gauche d un op rateur infix doit tre parenth s e Exemple insert set_alias foo 44 oper X foo gt X oper X foo gt X PrologIA Dola ie A Poly HERITAGE El ments de base R1 31 list oper 345 val foo 348 _348 gt 345 oper _345 44 gt 345 PrologIA Prolig R1 32 Manuel de R f rence HERITAGE PrologIA Z J Prolog LE RYT AEE CIS LATE 2 1 2 2 2 3 2 4 2 5 2 1 2 Le contr le de l effacement des buts Le contr le Geler A propos des arbres infinis Quelques conseils pour la programmation r cursive Les m ta structures Le contr le A chaque tape la machine Prolog doit faire deux choix 1 L un pour choisir un but dans une suite de buts effacer C est le premier l ment de la suite qui est toujours choisi C est dire que pour effacer une suite de buts q0 q1 qn on efface d abord q et ensuite q1 gn 2 L autre pour choisir la r gle qui sert effacer un but b C est la premi re r gle dont la t te s unifie avec le but b qui est choisie Cela peut se r sumer par le programme Prolog sui
341. och indique coch avec la marque standard de la machine Si v est un entier plus grand que 1 le caract re de la machine h te ayant le code v est utilis comme marque Exemple gt check_item 0 colors black nil 1 command menu u c v v est le code du caract re utilis en conjonction de la touche de commande 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 gt char _ code T n command menu 0 Contr le trace nil n PrologIA J Prolog WIAA SAT S LAGE Primitives graphiques U5 25 s Le caract re utilis comme raccourci clavier est un caract re appartenant au texte de l item du menu il est d sign au moment de la d finition du menu ou de l item enable menu u c v Permet de d sactiver v 0 ou de r activer v un menu ou un item L exemple suivant d sactive tout le menu d dition gt enable menu 0 Editer nil 0 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 Fen tres trace nil 6 5 5 Mode de dessin et d criture L ensemble des primitives d crites ici agit sur des propri t s de l unit graphique
342. ock exit SANS block CORRESPONDANT catch coo X Y true catch car X Y true X 1 Y 1 catch g C write h1 h1 C c fail_if X Est quivalent l appel de not call X fail if true fail if 4 5 once G Efface le but G de la premi re mani re possible Est d fini par la r gle once G G throw X Est quivalent un appel de block_exit X1 X1 tant une copie du terme X renommage des variables true S efface toujours avec succ s ProloglA Dale ees TAG Prolog HERITAGE Extensions Edinburgh R 10 5 unify_with_occurs_check X Y Tente l unification des termes X et Y avec une v rification de non production d arbres infinis Echoue si l unification choue ou si elle g n re un arbre infini Exemples unify with occurs check 1 1 unify with occurs check 1 2 unify with occurs check X 1 X 1 unify with occurs check X a X unify with occurs check X 1 X unify with occurs check X X 1 10 3 Manipulation des r gles abolish P Se comporte comme suppress P ou P est un identificateur ou un terme de la forme identificateur arit assert X assertz X Ajoute en queue de paquet la r gle ou le fait X Voir assert d crit pour Prolog II Attention en syntaxe Edinburgh la virgule est a la fois un s parateur et un op rateur il faut donc parenth ser l argument dans le cas des regles assert a as
343. off inactif le comportement de Prolog sur une r gle appel e et non d finie nom de la variable d tat unknown valeurs possibles error g n ration d une erreur warning g n ration d un avertissement ou fail chec l interpr tation des doubles quotes en position d argument nom de la variable d tat double_quotes valeurs possibles chars liste de caract res codes liste des codes des caract res atom atome ou string vraies cha nes la possibilit de convertir des caract res en d autres nom de la variable d tat char conversion Seule valeur possible actuellement off inactif l affirmation que l arithm tique enti re n est pas limit e nom de la variable d tat bounded valeur non modifiable false l arit maximale nombre d arguments d une r gle ou d une structure nom de la variable d tat max _arity valeur non modifiable 8388607 la d finition de la division enti re et du reste de celle ci ProloglA R 10 20 Manuel de R f rence HER 7 Prolog TAGE nom de la variable d tat integer_rounding_function valeur non modifiable toward zero current _prolog flag X Y Renseigne sur l tat courant des variables d tat de l environnement Les variables d tat max_integer et min_integer provoquent toujours un chec car l arithm tique enti re n est pas born e Exemple On veut conna tre la valeur de toutes les variables d tat current prolog flag F V F bound
344. oglA U5 30 Manuel d Utilisation Windows Le premier argument n o n est un entier ou un identificateur d termine la proc dure appel e 0 frameRect frame Dessine le p rimetre du rectangle hu paintRect paint Remplit le rectangle avec le motif associ au crayon 2 eraseRect erase Efface le contenu et le p rimetre du rectangle Wo invertRect invert Inverse la couleur de chaque point 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 A frameOval Dessine le p rim tre de l ovale inscrit dans le rectangle Nn paintOval Remplit l ovale avec le motif associ au crayon 6 eraseOval Efface le contenu et le p rim tre de l ovale invertOval Inverse les bits de l ovale Si l ovale a un coloriage autre que noir et blanc le r sultat est d pendant de la machine 8 frameRoundRect Identique a frameRect mais avec des coins arrondis N 9 paintRoundRect Identique a 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 Les dessins ult rieurs traceront uniquement ce qui est l int rieur du rectangle Autrement dit d finit un rectangle de visibilit de tous les dessins venir Pour en annuler l effet le refaire avec les coordonn es de l c
345. ointeur de l unit type T o T sera unifi avec le type de l unit ProloglA R 10 14 Manuel de R f rence HER A Prolog TAGE reposition B o B sera unifi avec la valeur true ou false suivant l option choisie l ouverture de l unit eof_action A o sera unifi avec l action accomplir sur une fin de fichier end of stream E o E sera unifi avec not Si l on n est pas sur une fin de fichier at si l on se trouve sur une fin de fichier past Si l on a d pass la fin de fichier une lecture a encore t tent e apr s une fin de fichier signal e C ne peut pas tre un alias car il peut aussi tre utilis en sortie Exemples stream property S P S 6 P file name foo 7 P file name bfoo S 6 P mode append 7 P mode read S 6 P alias momo S 7 P alias bfile 6 P type text S 7 P type binary S 7 P input 6 P output S 6 P position 69 S 7 P position 4 6 P reposition true S 7 P reposition false 6 P eof action error S 7 P eof action eof code S 6 P end_ of stream not S 7 P end_ of stream not stream property S type text S 6 stream _property 7 type B B binary 10 5 2 Entr es 10 5 2 1 Interpr tation des cha nes de caract res Un texte en position d argument not entre doubles quotes peut tre interpr t par l analyseur syntaxique de diff rentes mani res suivant l
346. oit imm diatement quitt d s qu une erreur ou un backtracking est notifi autrement dit d s que l indicateur devient non nul En effet quand l indicateur est non nul cela refl te une situation anormale qui n cessite dans le programme Prolog un backtracking ou une erreur qui pourront tre r alis s seulement lorsque la machine Prolog sera relanc e c est a dire lorsque le programme externe se terminera Il peut s agir galement d une erreur plus grave ayant pour cons quence l arr t de la machine Prolog 7 2 Fonctions de communication de donn es simples Les fonctions d crites ici conviennent dans les cas simples ou le type des donn es a transf rer est connu au moment de l appel et correspond un type du langage externe typiquement les entiers les r els et les cha nes de caract res Pour les autres cas d autres fonctions de communication plus g n rales existent elles sont d crites au 7 3 Chaque type de donn es a une fonction qui lui est associ e pour transf rer cette donn e depuis Prolog vers le programme externe et une autre pour la transf rer depuis la fonction externe vers Prolog 7 2 1 Test du type d un argument La fonction get _arg type permet de tester le type d un argument Prolog afin de pouvoir choisir la proc dure de communication appropri e pour r cup rer sa valeur Cette fonction permet galement de conna tre la taille en octets qu occuperait l argument Ceci est tr s utile en particul
347. ole des caract res lus ou crits sur une autre unit de type fichier ProloglA Prolog R5 14 Manuel de R f rence HERITAGE no_echo Annule l effet de echo 5 3 Chargement et adaptation du module de dessin Le module Dessin ne figure pas dans l tat initial qui vous est livr Vous pouvez l inclure en chargeant le fichier binaire gt load dessin mo Pour charger a partir du r pertoire Prolog taper la commande gt getenv PrologDir2 S cone_string S dessin mo S1 load S1 Vous pouvez galement recompiler le module source gt insert dessin m2 Ce fichier cr e un nouveau module Dessin contenant le programme de trac d arbres et d quations Ceci rend disponible les r gles suivantes voir 5 2 1 draw_equ draw_tree draw_mode set_draw_mode gr_tree_ click si le mode graphique est activ S agissant d un module de dessin il faut bien entendu y incorporer certains renseignements sur les possibilit s semi graphiques des terminaux utilis s A cette fin un mode de dessin draw_mode est associ a chaque protocole de gestion de terminal Quelques configurations sont d j d finies vt100 tty Il vous appartient d ajouter a dessin m2 celles qui correspondent aux terminaux que vous utilisez Pour d finir un nouveau mode de dessin vous devez 1 Lui donner un nom interne qui est un identificateur tty vt100 etc un nom externe qui est une cha ne de caract res TTY
348. olog est lanc contient des modules poss dant une r gle ini module chacune de ces r gles est effac e dans un ordre d fini par Prolog d s la fin de l initialisation Ensuite Prolog tente d effacer le but to_ begin ProloglA Prolog R6 2 Manuel de R f rence HERITAGE La r gle to_begin n est pas d finie dans l tat initial Si l utilisateur veut faire d marrer automatiquement un programme il doit ajouter la r gle to_begin gt xxxx o xxxx est le but initial effacer de son programme d application Il doit ensuite sauvegarder cet tat Lorsque plus tard il appellera Prolog avec ce nouvel tat xxxx sera imm diatement ex cut 6 3 Edition de programmes Prolog H tant un compilateur incr mental il vous permet d diter des r gles sans quitter Prolog en utilisant un diteur que nous appellerons ici diteur r sident L diteur r sident est activ par la commande Prolog edit Il existe plusieurs variantes de cette commande pour modifier un ou plusieurs paquets de r gles diter et recompiler un module source diter un fichier de texte quelconque A propos d dition il faut savoir que les r gles sont supprim es de l espace du code de Prolog pour tre crites dans le fichier de texte qui sert pour l dition A la fin de l dition le fichier est r ins r l dition compile et par cons quent l dition de faits non compil s les transformera en r gles compil es
349. olog le programme pour traiter les interruptions cc c test c prolink test o testTable prolog gt insert message gt val counter n outl n count N gt val mod N 1 1000000 N1 assign counter WN1 count N1 gt install_handler count 0 3 Se connecter sur une autre console d terminer le num ro de processus pid de Prolog avec la commande ps et envoyer le signal 30 a Prolog A chaque envoi du signal la valeur courante du compteur s imprime sur la console Prolog Voir le manuel d utilisation 2 8 pour trouver les instructions de compilation et d dition de lien avec Prolog adapt es votre syst me 2Commande pour cr er le module objet compil de test c ProloglA Poly HERITAGE Interruptiions R9 5 shellS ps ax gt install handler count 0 paw 2D25 5 PLrOLOg shell kill 30 2525 64790 shells kill 30 2525 301267 Cette commande envoie le signal SIGUSR1 auquel doit r agir Prolog au processus Prolog ProloglA R9 6 Manuel de R f rence ProloglA Z J Prolog LE RYT AEE CIS LATE 10 Extensions Edinburgh 10 1 Syntaxe 10 2 Le contr le 10 3 Manipulation des r gles 10 4 Op rations pr d finies sur les donn es 10 5 Les entr es sorties 10 6 L environnement 10 7 Traduction de DCG Ce chapitre d crit les possibilit s suppl mentaires pr sentes lorsque le module de compatibilit Edinburgh est charg Le plan de c
350. ologIA J Prolog LIE RYT AIEEE CIS LATE 1 El ments de base 1 1 Notations utilis es 1 2 Jeu de caract res 1 3 Les variables 1 4 Constantes 1 5 Termes et arbres 1 6 Les op rateurs 1 7 Les r gles et les assertions 1 8 Les m canismes de base de Prolog 1 9 La syntaxe compl te de Prolog II 1 10 Le macroprocesseur 1 1 Notations utilis es Dans ce manuel nous utiliserons des r gles hors contexte pour d crire la syntaxe de toutes les formules intervenant dans Prolog La notation utilis e ici est la m me que celle utilis e par la commission de normalisation de Prolog e Les symboles non terminaux sont repr sent s par des identificateurs et les terminaux sont entre doubles quotes wom est choisi comme symbole de r criture et une r gle se termine n s e Le symbole par un Les l ments d un membre droit de r gle sont s par s par des e Les accolades repr sentent un nombre quelconque d apparitions ventuellement aucune des l ments qu elles encadrent e Les crochets signalent le caract re optionnel des l ments qu ils encadrent e La barre verticale exprime l alternative entre les l ments qu elle s pare Des parenth ses sont utilis es lorsque le r sultat de cette alternative appara t dans une liste de symboles wow e Le signe est utilis pour repr senter des exceptions e Certaines r gles de r criture d pendent des op
351. ologIA Prolog connait maintenant les r gles pr d finies et votre programme gt pere Jean y Vous pouvez lancer une ex cution y Marie y Pierre gt quit On sort sans sauver BYE muet Pour sauvegarder l tat sous un autre nom de fichier utilisez la commande exit nom de fichier 2 5 Interruption d un programme A tout instant un programme Prolog peut tre interrompu par la frappe de la commande Ctrl Pause Cette interruption est trait e par le syst me Prolog de gestion des erreurs et correspond l erreur 16 Ainsi elle peut tre r cup r e par un programme au moyen de la r gle pr d finie block voir le manuel de r f rence Si ce n est pas le cas l erreur remonte jusqu au niveau de la ligne de commande Prolog et le message INTERRUPTION UTILISATEUR est affich 2 6 Construction et lancement de Prolog avec graphisme Pour la premi re ex cution ex cuter la commande de lancement de Prolog avec le module graphique C gt win prolog m graphic mo Apr s avoir effectu les choix propos s dans le panneau de configuration il est conseill de sauver l tat courant afin de ne plus avoir refaire ces choix gt save_state monini po Pour les ex cutions suivantes il suffira alors de lancer la commande C gt win prolog monini po 2 7 Compilation et dition de liens Pour une extension de Prolog il est possible d utiliser le fichier prouser c ou bien cr er un ou plusieurs autres mo
352. om de fichier Il n y a pas de valeur par d faut pour cette variable Note Sous Windows3 votre fichier de commande devra en plus a la fin cr er un fichier de nom fi e end dans un r pertoire d fini par la variable d environnement de nom TEMP ceci afin d indiquer la terminaison de l dition Si vous d sirez par exemple utiliser l diteur ed in du DOS vous devez construire un fichier de commande myedit bat ayant la forme ProloglA 2 J Prolog TA NAT LITE 2 TDIT LE GE Guide d installation sous l environnement Windows U1 9 Poole oe rem begin edlin 1 echo gt gt file end rem end Si vous d sirez par contre utiliser l diteur int gr plut t qu un diteur externe vous devez ex cuter le pr dicat suivant gt reload int_edit mo ProloglA Prolig U1 10 Manuel d Utilisation Windows HERITAGE ProloglA 7 Prolog LIE RYT AIEEE CIS LATE 2 1 2 2 2 3 2 4 2 5 2 6 2 7 2 Utilisation de Prolog II Windows Lancement et arr t de Prolog Espaces et tailles par d faut Syntaxe de la ligne de commande Cr ation et ex cution d un programme Interruption d un programme Construction et lancement de Prolog avec graphisme Compilation et dition de liens Prolog II est le compilateur d une version avanc e du langage Prolog Le compilateur Prolog II Windows vous permet de charger d ex cuter d tendre ou de modifier interactivement un programme Prolog Le compilateur es
353. on doit imm diatement sortir du programme externe si la variable repr sent e par err est non nulle Voici les fonctions disponibles pour les types simples Interface C int put_integer no_arg value err int no_arg long value int err int put_real no_arg value err int no arg float value int err int put_double no_arg value err int no_arg double value int kerr int put string no arg value err int no_arg char value int err Interface Fortran integer 4 function fputinteger no_arg value err integer 4 no_arg value err integer 4 function fputreal no_arg value err integer 4 no_arg err real 4 value integer 4 function fputdouble no_arg value err integer 4 no_arg err real 8 value integer 4 function fputstring no_arg lg value err integer 4 no_arg lg err character value no_arg Entier donnant le rang de l argument choisi dans le pr dicat Prolog Le premier argument a le rang 1 le second a le rang 2 et ainsi de suite ProloglA Prolog R7 8 Manuel de r f rence HERITAGE value Valeur qui sera unifi e sur l argument de rang no_arg dans le pr dicat Prolog associ Pour le transfert de donn es 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 La fonction put string copie alors cette cha ne de caract res dans la m moire de travail de Prolog avant d unifier la valeur avec l ar
354. oncteurs peuvent tre utilis s comme noms symboliques globaux au sens de identiques dans tous les modules lt nom de foncteur gt lt nom de r gle gt lt nom g n rique gt lt nom g n rique gt lt suffixe gt Exemples de noms g n riques john data sentence singular Les identificateurs g n riques correspondent a ceux qui sont utilis s par d faut pour les noms utilisateurs lorsque l on ne fait pas de d claration de module ProloglA Structuration et modification des r gles R3 3 3 1 3 Simplification des notations La sp cification syst matique des qualificateurs est quelque chose de relativement lourd qui peut facilement tre vit dans les textes sources en indiquant le d but et la fin des r gles d un module Les qualifications peuvent alors tre r alis es automatiquement lors de la lecture du module L exemple pr c dent peut ainsi se noter dans le texte source module lexicon data 1 gt data 2 gt pn X gt end module lexicon module grammar sentence X gt lexicon pn X1 sv X2 error message M gt sys write M data 8 end module grammar mn Tout identificateur not sans le caract re est dit crit en notation simplifi e ou non qualifi e Il est alors repr sent dans le texte source par son seul suffixe Avec cette seule convention si le qualificateur est diff rent de celui du module la forme compl
355. ondition _e SOLUTION EXISTS gt free _e condition _e e gt integer _e condition _e BLOCK_EXIT WITHOUT BLOCK gt point arret1 K S gt stop point_arret2 K S gt stop point arret2 NO GOAL T Conceptuellement tout se passe comme si l utilisateur se trouvait dans la r gle point_arret de par la mani re dont est crit exec la valeur du ler argument obtenu par get_integer 1l contient galement l tat atteint Si cet tat est SOLUTION EXISTS le deuxi me argument obtenu avec get term 2 contient le terme d finissant la solution int ressante 8 4 Programmation Le fichier proext h contient les d clarations des proc dures et des structures d interface Il faut mettre un include de ce fichier en t te des modules utilisant ces proc dures Voici un exemple de programme C imprimant toutes les solutions de enum i 2 8 que l on peut crire tel quel dans le module C d interface utilisateur prouser c la place de la d claration EXTERNAL DESCRIPTOR qui s y trouve ProloglA Dolg Sp cificit s de Prolog II Windows U3 7 define MAX_TAB 10 exemple int err long i P_SYMBOL pro_symbol char tags MAX TAB int vals MAX TAB int n 1 initialisation du but new goal j tags 0 T vals 0 1 tags 1 I vals 1 4 tags 2 N vals 2 pro symbol sys enum tags 3 V vals 3 0 i tags 4 I vals 4 2 t
356. ones communes tableaux avec d autres programmes e Interface SQL entre Prolog et les SGBD e Manipulation de bases de faits cons quentes e Donn es num riques entiers et r els homog nes avec les autres langages support s par le syst me h te y compris pour leurs repr sentations tendues Environnement de programmation e Manipulation de r gles assert clause rule list etc int gr e au compilateur et fonctionnant sur les r gles compil es e R cup ration d interruptions asynchrones en Prolog II autorisant par exemple la gestion d environnements fortement interactifs souris fen tres etc e Debugger de haut niveau permettant une mise au point rapide des gros programmes e Editeur int gr coupl avec la compilation incr mentale Interface graphique e Biblioth que portable entre divers environnements ProloglA 7 Prolog A AT TAGE e D finition d objets fen tres menus boutons e Composition de dessins e Gestion de dialogues PrologIA G n ralit s xi xii Manuel de R f rence ProloglA J Prolog LIE RYT AIEEE CIS LATE G n ralit s xiii Sur ce Manuel La documentation concernant PROLOG II a t regroup e en deux manuels Le premier le Manuel de r f rence d crit de mani re pr cise le langage et son utilisation Ce manuel est valable en principe pour toutes les implantations Le second le Manuel d utilisation d crit tout ce qui
357. ontraire drawing area une erreur est g n r e La fin d dition est provoqu e par un retour chariot un caract re de tabulation ou un clic dans la fen tre en dehors du rectangle d dition et en dehors d un objet Si k n est pas une variable le rectangle et son texte sont seulement dessin s sans dition sl est la cha ne qui sert initialiser l dition pl p2 sont des entiers d finissant les indices des caract res de d but inclus et de fin non inclus de la s lection dans le texte repr sent e en vid o inverse Le premier indice est 0 Initialiser avec un champ vide correspond aux valeurs lt 0 0 gt ProloglA Prolog U5 36 Manuel d Utilisation Windows HERITAGE r d finit la position du rectangle englobant Le texte est cadr gauche xl yl x2 y2 sont les coordonn es des coins sup rieur gauche et inf rieur droit du rectangle dans la fen tre 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 siclic souris dans la fen tre en dehors du rectangle d dition 2 sicaract 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 s Remarque cette fonction peut galement tre r alis e avec les primitives de cr ation
358. opos est valid commandant l ouverture de cette About Box Son contenu peut tre quelconque mais un seul bouton sera reconnu et devra porter l identificateur 1 DOK D autres ressources utilisateur peuvent tre fournies mais elles ne seront pas g r es automatiquement Suivre la proc dure standard du syst me Se rappeler seulement deux points essentiels Votre fonction de dialogue doit aussi tre export e par l Application donc il faut la rajouter dans le module prolog def Votre ressource sera localis e dans le module customiz dll et non dans prolog exe donc il faut utiliser le handle hUserDLL disponible dans prouser c a la place du handle d instance dans toutes les primitives manipulant vos ressources DialogBox Dans le cas de Windows 3 et pour utiliser des ressources au moyen d extensions 16 bits il sera plus judicieux de lier ces ressources directement a la DLL d extension Le module userrsc rc fourni dans le kit est un exemple de script de ressources de personnalisation Il a t compil et inclus dans le fichier customiz dl_ fourni dans le kit Prolog Cette DLL doit tre renomm e en customiz dll pour avoir une d monstration de cet exemple La compilation d une DLL de personnalisation avec le SDK 16 bits fait l objet d une proc dure particuli re d crite en commentaires dans le fichier userrsc rc 3 4 Modification du module principal Le fichier proentry c contient le source de la rou
359. opup menu de cette fen tre S il n existe pas set_menu le cr e mais son identification n est pas connue En supposant que mygraph est l identification d une fen tre graphique d j cr e la suite de buts ci dessous cr e un popup menu compos de la liste d items doLine doRect doOval avec attach e chacun des items respectivement la proc dure doLine 1 doRect 1 doOval 1 gt new popup menu popgraph mygraph gt set_menu popgraph nil doLine doRect nil gt set_menu mygraph new nil doOval new_pulldown_menu o p S Cr e un support de pulldown menu identifi par o de nom s cha ne de caract res attach a la fen tre p Ses items seront ensuite cr s par la primitive set_menu N est pas valable pour les fen tres de forme cadre La suite de buts ci dessous cr e un pulldown menu de titre custom compos moon n de la liste d items myColor myMode myFont myPen avec attach e chacun des items respectivement la proc dure myColor 1 myMode 1 myFont 1 myPen 1 gt new_pulldown_menu mymenu mygraph custom gt set_menu mymenu nil myColor myMode myFont miPen nil gt set_menu mymenu miPen nil myPen new_scrollbar o p v b lt x1 y1 x2 y2 gt l Cr e une scrollbar identifi e par o dont les coordonn es sont x y1 x2 y2 dans la fen tre parente p Elle sera visible selon la valeur de v Six2 et y2 sont libres ils seront alors unifi s ave
360. or i 0 i lt len 2 i c strlil str i str len i 1 str len i 1 c EXTERNAL DESCRIPTOR calld_desc complete_example DIRECT C FUNCTION 13 POINTER complete example average DIRECT C FUNCTION 1 POINTER average reverse DIRECT C FUNCTION 1 POINTER reverse aros DIRECT_C_FUNCTION 2 POINTER quicksort bi 0 0 1 En supposant que le fichier ci dessus s appelle callc c il faut le compiler faire l dition de liens voir le manuel d utilisation 2 8 puis activer le nouveau Prolog pour obtenir Prolog II gt eq r_eserved 30 callC complete example 11 integer in input lt 155 i gt integer in output with initialization PrologIA Manuel de r f rence 13 0e0 real in input lt 222 0e0 r gt real in output with initialization str_ input string in input lt ee s 10 gt string in output with initialization 123 456 nil array of integers in input 14 0e0 15 0e0 nil array of reals in input lt 11 22 33 w 5 20 gt array of integers in output with initialization lt 44 0e0 55 0e0 66 0e0 t1 5 20 gt array of reals in output with initialization list_str_inl list_str_in2 nil array of STRINGS in input lt list str outl list str out2 list str out3 nil T_S r_eserved 5 gt r_eserved integer in input la lt R m gt result iil 11 iol
361. ou tous les acc s d un module Rend non visible pour debug Si x est de la forme i a avec i identificateur et a entier concerne le paquet de r gles d acc s i et d arit a Si x est une cha ne concerne toutes les r gles du module de nom x Par non visible pour debug on entend dont l acc s est cach Le debugger ne montrera ni les appels ce paquet de r gles ni les appels r alis s dans la queue des r gles de ce paquet Si dans une queue de r gle non visible on appelle une r gle visible seule la queue de cette derni re sera visualis e Les r gles pr d finies qui retournent des acc s de r gles dictionary par exemple ignoreront ces r gles cach es pour debug On notera que pour d compiler ces r gles il faut utiliser des r gles pr d finies de d compilation nominatives qui attendent l identificateur d acc s et l arit et non globales qui attendent un nom de module par exemple hidden x Masquer une r gle ou un module Si x est de la forme i a avec i identificateur et a entier concerne le paquet de r gles d acc s i et d arit a Si x est une cha ne concerne toutes les r gles du module de nom x Rend les r gles non visibles la d compilation et non visibles au debugger ou aux primitives qui montrent les acc s Est quivalent la suite de buts hidden rule x hidden debug x include f Inclure la compilation d un fichier ProloglA R 3 26 Manuel de R f rence R alis
362. our la m me direction Dans ce cas l objet sera redimensionn en m me temps que son parent Les objets qui doivent avoir un parent sont les suivant Check button bouton de choix deux tats quand il est activ il change d tat et g n re un v nement Push button bouton qui g n re un v nement quand il est activ Radio button bouton de choix exclusif c est un bouton deux tats qui fait partie d un groupe de boutons dont un seul peut tre s lectionn la fois En particulier d s qu un bouton du groupe est activ il g n re un v nement il prend la s lection et celui qui l avait la perd Par d faut la cr ation c est le premier bouton du groupe qui est s lectionn Drawing area zone graphique destin e au dessin sensible aux actions clavier et souris Elle peut contenir du texte par les moyens classiques d criture Par d faut l image bitmap n est pas sauvegard e mais la zone peut tre dot e d un bitmap pour son retra age automatique Les primitives pr fix es par gr_ agissent dans cette zone si elle a t pr c demment d finie comme la zone graphique courante voir gr window Editfield zone de texte ditable monoligne ou multiligne g n re un v nement lors de la frappe d un caract re ou de la perte ou du gain de focus Label zone de texte non ditable non sensible aux v nements sert uniquement l affichage d un texte dont le retra age est g
363. our le dessin des arbres Les valeurs de x sont les m mes que pr c demment Si vous voulez faire imprimer des arbres sur une imprimante classique il faut se mettre en mode TTY Pour utiliser cette primitive il faut que le module de dessin d arbres soit charg 5 2 2 Modification de l unit de sortie Le nom des unit s de sortie peut tre soit une chaine Prolog soit un identificateur Prolog soit un entier Toutefois les fichiers et les fen tres pr d finies sont toujours d sign s par des chaines ProloglA J Prolog TA NAT LITE J Prolog LIE PIT AZT AEN AGE Les entr es sorties R5 13 output u output u n L unit de nom u devient l unit courante de sortie Si l unit d sign e par u ne figure pas d j dans la liste des unit s de sortie ouvertes alors un descripteur pour l unit est allou et ventuellement un fichier est cr ayant le nom indiqu par u Dans la forme deux arguments n pr cise la taille en nombre de caract res du tampon de l unit Elle doit tre comprise entre 400 et 32K Si n n est pas dans cet intervalle la taille du tampon sera de la valeur la plus proche Dans la forme un seul argument le tampon aura une taille de 400 caract res En aucun cas ces primitives ne cr ent une fen tre ou un fichier m moire il faut utiliser pour cela les primitives sp cifiques Si u est une cha ne de caract res termin e par le signe le fichier dont le nom est la cha ne
364. oute op ration m me bloquante en traitant les v nements n cessaire pour afficher le texte Toutefois on remarquera que Prolog peut mettre des lignes vides et donc un filtrage peut tre n cessaire si par exemple des bo tes de messages sont utilis es ProloglA J Prolog TOIVE LITE rs Dolg Sp cificit s de Prolog II Windows U3 11 get_error_complement int lgmax char str int in external code Cette routine permet d obtenir sous forme de cha ne de caract res le terme correspondant l ventuel compl ment d erreur remont par l ex cution d un but Elle doit tre appel e avant la fonction ki _goal La variable str cha ne de caract res doit avoir t allou e auparavant et doit tre d une longueur sup rieure ou gale l entier gmax pass en premier param tre Si le bool en in_external_ code est non nul cela signifie que l on d sire obtenir la cha ne en code caract re externe ProloglA HERITAGE J Prolog LIE RYT AIEEE CIS LATE 9 Interruptions 9 1 Concepts 9 2 Description des interfaces 9 3 Exemple complet On d crit dans ce chapitre comment lier des programmes Prolog la survenue d v nements asynchrones tels que des interruptions mat rielles Lorsqu une interruption survient le programme Prolog courant est automatiquement suspendu et la fonction g rant l interruption est activ e d s que la machine Prolog se trouve dans un tat o l on peut r aliser de
365. ouvelle fen tre l origine tant situ e au coin sup rieur gauche de l cran t est de la forme type ou bien fype liste_ attributs o type d termine le type de la fen tre et donc les op rations qui peuvent lui tre appliqu es Les valeurs possibles pour type sont EDIT ou edit pour la cr ation d une fen tre EDIT FRAMEPANEL ou framepanel ProloglA U5 8 Manuel d Utilisation Windows pour la cr ation d une fen tre FRAMEPANEL GRAPHICS ou graphics pour la cr ation d une fen tre GRAPHICS MODAL ou modal pour la cr ation d une fen tre GRAPHICS avec l attribut MODAL TTY ou tty pour la cr ation d une fen tre TTY Les valeurs possibles pour un attribut de iste_attributs sont lt DISTANCE n gt ou lt distance n gt n est un entier et d signe une portion de la partie dessinable de la fen tre r serv e pour une zone de cr ation de boutons Cette zone se situe en haut de la fen tre sur toute la largeur et sur une hauteur gale a n de la hauteur totale Cet attribut est valable pour tout type de fen tre mais n a pas d utilit pour les fen tres FRAMEPANEL lt FONT n gt ou 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 an est d pendante du syst me h te lt FONTSIZE n gt ou lt fontsize n gt D finit la taille de la police de caract res utilis e dans une fen tre de texte
366. ows ProloglA J Prolog LIE PIT AZT AEN AGE Manuel d Utilisation Windows vii Avant Propos La documentation concernant Prolog II a t regroup e en deux manuels le manuel de r f rence qui d crit de mani re pr cise le langage et son utilisation Ce manuel est valable pour toutes les implantations le manuel d utilisation qui d crit tout ce qui est d pendant d un ordinateur ou d un syst me d exploitation sp cifique Il y a donc un manuel d utilisation par mat riel Celui ci concerne la version WINDOWS Le manuel d utilisation pr cise comment se r alisent de mani re pratique sur votre ordinateur certaines fonctions d crites dans le manuel de r f rence Le chapitre premier d crit l installation de Prolog sur votre machine Le deuxi me chapitre concerne le lancement de Prolog la gestion des tats sauv s et la structure des noms de fichiers Le troisi me chapitre de ce manuel d crit ce qui est sp cifique cette version ce qu il y a en plus et en moins par rapport la version de base ainsi que les valeurs extr mes des constantes Le quatri me chapitre d crit la communication avec une autre application en utilisant le protocole DDE Le dernier chapitre d crit la biblioth que de primitives graphiques sp cifique chaque implantation Dans les exemples de ce manuel ce qui a t affich par l ordinateur appara t en caract res machine crire droits tandis que ce q
367. p rieur gauche de l cran Exemple gt set_window graphic 1 50 50 300 300 5 2 3 Rafra chissement des zones graphiques Les fen tres GRAPHICS ou les drawing area peuvent tre rafra chies automatiquement en leur associant un bitmap auxiliaire voir les primitives new _ window ou set_window ou new _drawing area Dans le cas contraire il existe une coroutine attach e aux zones graphiques et qui est toujours d clench e lorsque ces zones n cessitent un rafra chissement Cette coroutine est exec gr_update u o u repr sente le nom de l unit rafra chir La r gle gr update n est pas d finie dans l environnement standard et n est pas lanc e si l utilisateur ne la d finit pas L utilisateur peut donc en crivant une r gle gr update I d finir par programme ce que doit tre le rafra chissement d une zone graphique sans utiliser de bitmap auxiliaire ProloglA Prolog HERITAGE Primitives graphiques U5 13 5 3 Primitives l mentaires de gestion des objets attach s une fen tre Nous les avons qualifi es de primitives l mentaires car elles servent r aliser des op rations l mentaires telles que la cr ation la configuration et l interrogation d un objet Ensuite elles manipulent des l ments tr s simples savoir un objet ou un attribut d objet ou un v nement survenu sur un objet L ensemble des ces primitives ne permet pas de manipuler et configurer compl tement les
368. p rieur gauche de l objet v est de la forme lt p p2 gt o pl est l abscisse p2 est l ordonn e A pour effet le d placement de l objet N est pas valable pour les menus user _ field concerne le champ utilisateur qui n est pas du tout g r par Prolog v est un entier Le programmeur peut s en servir par exemple comme variable globale associ e l objet ProloglA 7 Prolog TA NAT LITE PRESS J Prolog TACE ld FE Primitives graphiques U5 19 visibility concerne la visibilit de l objet v vaut 0 si l objet est invisible 1 si l objet est visible N est pas valable pour les menus width_height v est de la forme lt p p2 gt o p est la largeur de l objet p2 sa hauteur N est pas valable pour les menus Les attributs sp cifiques aux listbox sont les suivants items concerne la liste des items d une listbox v est une liste de cha nes Prolog qui d crit dans le m me ordre tous les items par leur texte de la listbox selected_items concerne la liste des items s lectionn s d une listbox v est la liste des rangs des items s lectionn s Le premier item a le rang 1 S il est mentionn un rang qui n existe pas il est ignor S il est mentionn plus d un rang pour une listbox en s lection simple c est la derni re s lection qui est prise en compte state i concerne l tat d un item de listbox s lectionn ou non s lectionn v vaut respectivement ou 0 7 est un en
369. pal U3 4 3 5 Extensions en mode 16 bits R serv Windows 3 U3 4 3 6 Utilisation de PrologII sous forme de DLL U3 6 4 Communication avec une application en utilisant e sseoesooesoo0s0000000 le protocole DDE ten rosiner to soe seoses U4 1 4 1 Aper u du protocole DDE Le nd Ne U4 1 4 1 1 Les trois niveaux d identification du protocole DDE U 4 2 4 1 2 Les possibilit s du protocole DDE Prolog U4 3 4 2 Utilisation simple de Prolog II comme serveur DDE U4 4 4 2 1 Initialisation du serveur Prolog IH U4 4 4 2 2 Transmission d une requ te a Prolog IH U4 5 4 2 3 Ex cution d un but Prolog avec r cup ration cece deS SG NTO Satan ne ne ai Re EG eh U4 6 4 2 4 Sch ma du Serveur Prolog U4 7 42 9 EXEMDl ES mis den an rats U4 7 4 3 Programmer en Prolog I un applicatif Client ou Serveur U 4 8 4 3 1 Programmer un applicatif Client DDE U4 9 4 3 2 Programmer un applicatif Serveur DDE U4 11 5 Primitives Graphiques nana ainnetiandanonsest U5 1 5 1 Description du syst me graphique c cccceesceeeseeeeeeeeeeeeseees U5 2 DLL Ev nements LES en un ER Soci US 2 5 1 2 Objets crap hiques unes U5 2 5 1 3 Configuration du graphique Prolog II au d marrage U 5 5 5 1 4 Conventions utilis es dans ce chapitre U5 6 5 2 Primitives de gestion des fen tres
370. pic d sign par la cha ne de caract res Topic et au Serveur logique d sign par la cha ne de caract res _xService sauf si _xService vaut nil ce qui signifie sans pr f rence Pour que la conversation soit tablie le Serveur doit effacer ce but et durant cette op ration effacer la primitive ddeAcceptClient 3 sans quoi erreur ou chec le Client est d bout A priori le Client n est pas tenu d insister et donc un refus du Serveur peut tre consid r comme d finitif ddeCbClientRequest _hConversation _xRequest Notifie la requ te xRequest du Client dans les conditions li es la conversation _hConversation et attend la r ponse de mani re synchrone Le statut de terminaison de ce but conditionne celui de la requ te Une erreur Prolog aura ici le m me effet qu un chec Les requ tes reconnues sont les suivantes ddeRequestData _xArgument notifie une requ te Request standard pour la donn e nomm e par la cha ne xArgument et attend du Serveur l ex cution de la primitive ddeTransmitData 3 passant sa nouvelle valeur durant l effacement du but ddeWarmLinkData _tItem ddeOpen ou ProloglA J Prolog TA NAT LITE J Prolog LIE PIT AZT AEN AGE Communication avec une application en utilisant le protocole DDE U 4 13 ddeWarmLinkData _tltem ddeClose notifie une requ te Advise standard pour la donn e nomm e par la cha ne _t tem demandant un abonnement de type notification cette do
371. pilation sont actives option f ol au lancement de Prolog la compilation de block est optimis e et dans certains cas la d compilation d un tel but ne sera pas identique mais quivalente au but d origine Le but block e c b apparaissant dans une queue de r gles sera d compil en block e c b Ensemble ces deux r gles pr d finies constituent une sorte de raffinement du m canisme de r cup ration des erreurs en pratique e correspond au type d erreur guett c correspond un compl ment d information rendu par le m canisme de d tection ProloglA R2 6 Manuel de R f rence Un grand nombre de r gles pr d finies utilisent cette deuxi me tiquette comme compl ment d erreur C est souvent l argument cause de l erreur qui y est transmis En phase de mise au point de programmes cela peut para tre encore insuffisant Dans le kit des modules objets dbgbase mo dbggraph mo et dbgedin mo sont fournis Ils permettent apr s rechargement en cas d erreur d avoir des messages encore plus complets Le deuxi me argument de block sera unifi avec un terme de la forme pr dicat d appel ou lt pr dicat d appel compl ment d erreur 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 com
372. pitres pr c dents Un contexte permettant d crire le module exicon avec seulement des identificateurs abr g s est facile construire il suffit de prendre comme pr fixe par d faut celui couvrant le plus grand nombre d identificateurs et de repr senter les quelques noms de r gles dans la suite explicite set_context lex grammar Singular plural LL lexicon pn i Werbo adj PE data 3 5 1 D finition d un module Nous appellerons module p dans un programme donn et un moment donn le regroupement de tous les faits et r gles les fonctions valuables les identificateurs affect s par assign et les tableaux dont l identificateur d acc s appartient la famille p c est dire poss de le pr fixe p Les identificateurs de la famille p peuvent appara tre dans d autres modules mais pas en position identificateur d acc s c est dire nom de pr dicat de t te 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 On peut dire plus simplement qu un module est un regroupement de toutes les r gles ou les faits dont l identificateur d acc s a le m me pr fixe 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 3 5 2 Modu
373. point d arr t fixe 8 Option impression apr s unification valid e 16 Option impression avant unification valid e Un drapeau gal 0 correspond la configuration standard pr d finie debug n ou debug n f sont les pr dicats g n raux d activation du debugger n doit tre un entier connu au moment de l appel Il pr cise la configuration de d marrage telle qu elle a t d finie ci dessus Quand n vaut 0 cela correspond la configuration pr d finie standard f est un nom de fichier dans lequel seront redirig es les impressions du debugger Le fichier est ferm l ex cution d un pr dicat de d sactivation de l outil de mise au point Si les impressions de mise au point taient d j redirig es le pr c dent fichier est ferm pour tre remplac par f debug ou debug f sont les pr dicats de r activation du debugger Ils ne modifient pas la configuration en place f est un nom de fichier dans lequel seront redirig es les impressions du debugger Le fichier est ferm l ex cution d un pr dicat de d sactivation de l outil de mise au point Si les impressions de mise au point taient d j redirig es le pr c dent fichier est ferm pour tre remplac par f ProloglA R 6 18 Manuel de R f rence trace ou trace f sont des pr dicats particuliers du debugger Ils l activent dans une configuration pr cise celle du mode trace repr sent e par le drapeau 19 fest un nom de f
374. porte comme block _exit e nil Erreurs et sous sessions Prolog Tout ce qui est dit ci dessus concernant le m canisme d erreur block block _exit est vrai l int rieur d une m me session Prolog Lorsqu il s agit de transmettre une erreur travers une ou plusieurs sous sessions par exemple lorsqu un but est lanc par menu deux restrictions sont mentionner le deuxi me argument de block exit souvent utilis comme compl ment d erreur n est pas transmis Il vaudra toujours nil le premier argument de block exit est transmis uniquement s il est de type entier Dans le cas contraire c est l entier 317 pour l erreur block _exit SANS block CORRESPONDANT qui est propag Interruption A tout instant un programme Prolog 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 prise en compte par le m canisme g n ral des erreurs de Prolog et correspond l erreur 16 Cette erreur peut donc tre r cup r e par l utilisateur Sinon on revient au niveau de commande avec le message d erreur suivant INTERRUPTION UTILISATEUR bound x bound x s efface si x est li Une variable est consid r e comme li e si elle a t unifi e contre une constante entier r el identificateur cha ne un terme de la forme f 12 un terme de la forme lt f1 2 tn gt ou HUL 12 ty ProloglA J P
375. pr dicat utilisateur au terme correspondant Si v n est pas une variable est unifi e avec nil Exemple gt new tiv V 1 2 nil rulel add tlv V 3 4 nil rule2 add tlv V 5 6 nil rule3 get tlv V T V rule1 1 2 nil rule2 3 4 nil rule3 5 6 nil nil T rule1 1 2 nil rule2 3 4 nil rule3 5 6 nil nil 2 5 3 Unification forc e Une unification classique sans appel aux pr dicats utilisateurs peut tre forc e entre une variable attribu e et un terme connu ou bien une autre variable attribu e Cette unification s effectue au moyen d un pr dicat sp cial unify_tlv t1 t2 R alise une unification ordinaire entre les deux termes et t2 Voyons tous les cas possibles Si ni ni 2 ne sont des variables attribu es est quivalent eq 2 Si f1 est une variable attribu e ProloglA R2 16 Manuel de R f rence Si 2 est une variable ordinaire t2 unifi avec t deviendra donc une variable attribu e Si 2 est un terme connu unifi avec 2 deviendra donc ce terme connu la liste de termes attribu s sera alors perdue Si 2 est aussi une variable attribu e apr s unification et t2 d signeront une variable attribu e ayant pour liste de termes attribu s la concat nation des deux listes initiales celle de et celle de 72 Exemple gt new tiv V 1 2 nil foo unify tlv V 3 V 3 gt new tiv V 1 2 nil foo unify _tlv Z V V Z V foo 1 2 nil nil Z foo 1 2 nil n
376. put for i 0 i lt 10 i integer array tiol i 14 200 in output for i 0 i lt 10 1 real array trol i float i 200 in output for i 0 tsol i i string array printf strin d s n i tsol i in output if reserved strcpy tsol 1 strepy tsol 2 else tsol 0 tsol 1 strcpy tsol 2 return 1234 static REAL space for strings reserved by prolog tso1l 0 Zonel first pointer tsol 0 initialized by Prolog others pointers initialized by the user tsol 1 Zone2 NULL end of array tsol1 0 6 space for strings reserved by the user Zonel char malloc 10 tsol 1 Zone2 NULL returned value average tab n INTEGER tab n INTEGER i sum 0 for i 0 i lt n i sum tab i return sum n ProloglA TD JTAG HE GE Extensions avec des langages externes R 7 33 static mystremp al a2 char al a2 return strcmp al a2 static quicksort tab in tab out Sussressiseseseleteueneotemeseste char tab in tab out int i nbr for nbr 0 tab_in nbr nbr tab_out nbr tab in nbrl tab out nbr NULL qsort tab out nbr sizeof char mystremp static reverse str es sia Se ten at ee a ane ee OE le Se et a char str char c INTEGER i len len strlen str f
377. que comme elle se pratique dans FORTRAN Pascal etc Les optimisations si elles n ont pas t d sactiv es au lancement de Prolog du code g n r pour l appel au pr dicat assign suspendent momentan ment le m canisme de gestion automatique des espaces et des piles Le pr dicat fassign lui n est pas optimis On pourra le pr f rer assign dans les cas de programmes consommateurs d espace o assign manipule fr quemment des termes complexes On vitera ainsi d avoir faire une gestion manuelle de la m moire Le pr dicat cassign est similaire au pr dicat fassign mais permet de conserver les contraintes dif freeze et les attributs variables attribu es associ s aux variables du terme f Exemple gt assign nom fichier monfichier txt gt val nom_fichier x x monfichier txt gt En Prolog ces variables statiques peuvent tre vues comme une mani re particuli rement efficace de r aliser 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 fait ci dessus est conceptuellement quivalent gt retract nom fichier x nil gt assert nom fichier monfichier txt nil gt nom_ fichier x x monfichier txt gt Exemple possibilit d affecter un terme quelconque et non uniquement des constantes gt assign myterm jean lt 34 rue blanche gt A utres infos gt val myterm x val myterm y x j
378. r c dence inf rieure f y repr sente une expression de pr c dence inf rieure ou gale af ProloglA R5 16 Manuel de R f rence HER Prolog Les combinaisons possibles sont fx Op rateur pr fix avec op rande de pr c dence inf rieure fy Op rateur pr fix avec op rande de pr c dence inf rieure ou gale xf Op rateur postfix avec op rande de pr c dence inf rieure yf Op rateur postfix avec op rande de pr c dence inf rieure ou gale xfx Op rateur infix avec op randes de pr c dence inf rieure yfx Op rateur infix admettant gauche un op rande de m me pr c dence avec parenth sage gauche droite xfv Op rateur infix admettant droite un op rande de m me pr c dence avec parenth sage droite gauche Lorsque n est gal 0 op 3 a pour effet de supprimer la d claration existante pour l op rateur s Lorsque les arguments de op 3 sont des variables libres ils sont unifi s successivement avec les d finitions des op rateurs existants Exemple gt insert op 900 fy not op 700 xfx eq not x gt x fail not x gt gt not 1 2 1 gt split 1 2 L L eq 1 2 nil 1 Se rappeler qu en syntaxe Prolog II les op rateurs doivent tre parenth s s au premier niveau d une queue de r gle ProloglA J Prolog INT RITA CIS LATE 6 1 6 2 6 3 6 4 6 5 6 6 6 7 6 8 6 L environnement Comment sortir de Prolog D
379. r cup rer num ro d ordre du format concern dans la cha ne transmise new_pattern ou s il vaut 0 indique que toutes les valeurs sont r cup rer Le ou les arguments suivants sont les adresses des variables C dans lesquelles seront m moris es la ou les valeurs voulues si ce ne sont pas des chaines Dans le cas o l on attend une cha ne de caract res formats s ou I deux arguments sont n cessaires Le premier des deux doit tre un pointeur sur une zone m moire dans laquelle Prolog pourra ranger la chaine le second doit tre un entier qui indique la taille maximum de la chaine La fonction retourne 0 si tout c est bien pass un num ro d erreur si une erreur s est produite Voici pour chaque format le type de s variable s C associ e s format type C mode de passage ProloglA J Prolog TA NAT LITE SF OHT gt A Pal Sp cificit s de Prolog II Windows U3 9 d long adresse s char int valeur of float adresse F double adresse i long adresse I char int valeur Voici un exemple d appel de get_formats long i erreur get formats 0 amp i La fonction get formats va se charger de garnir l entier i avec la valeur associ e au premier format l entier 2 dans notre exemple A noter que cet appel est strictement quivalent erreur get formats il amp i 8 5 2 Exemple Voici un exemple d utilisation des fonctions new pattern et get formats regles test regles test regles
380. r p f lt z y gt primaire n lt x y gt gt mot n lt x y gt integer n primaire x lt x y gt gt mot x lt x y gt primaire lt o u p gt lt x y gt gt mot O lt x Z gt op_un o o_u primaire p lt zZ y gt primaire e lt x y gt gt mot lt x Z gt expression e lt z t gt mot lt t y gt reste de somme p e lt x y gt gt mot O lt x Z gt op_add o o_a produit p lt z t gt reste de somme lt o a p p gt e lt t y gt reste de somme e e lt x x gt gt reste de produit f p lt x y gt gt mot O lt x Z gt op mul o o m facteur f lt z t gt reste de produit lt o_m f f gt p lt t y gt reste de produit f f lt x x gt gt reste de facteur p f lt x y gt gt mot O lt x Z gt op exp o o e primaire p lt z t gt reste de facteur lt o e p p gt f lt t y gt reste de facteur f f lt x x gt gt mot a lt a x x gt gt op_add plus gt op_add minus gt op mul mult gt op_exp exp gt op _un minus gt op un sin sin gt op un cos cos gt r gles de d rivation derivee x x 1 gt derivee n x 0 gt integer n derivee plus u v x plus u v gt ProloglA PNR PU HERITAGE Poly Quelques exemples de programmes Prolog II C 7 derivee u xX u derivee v x v derivee minus u v x minus u v gt derivee u x u
381. r sente une liste d identificateurs d une lettre Ils seront pr fix s en fonction du contexte courant de lecture ProloglA U2 8 Manuel d Utilisation Windows I Integer L unit repr sente une liste d entier gaux respectivement au code Machine ou ISO en fonction de l option choisie de chaque caract re de la cha ne S String L unit repr sente une cha ne de caract re Prolog undefined La valeur d termine le comportement lors d une tentative d effacement d une r gle non d finie Les valeurs possibles sont E Error Impression du but en cause et arr t F Fail M me comportement que l interpr teur chec W Warning Impression d un message et chec variables La valeur d termine la syntaxe utiliser pour les variables et les identificateurs E Edinburgh Notation type Edinburgh P Prolog II Notation type Prolog II U Underlined variables Seules les suites alpha num riques commen ant par _ d notent des variables C est la forme de base voir le manuel de r f rence chapitre 1 w warning Param tre l avertissement de certaines configurations tonnantes N agit pas sur les messages qui r sultent de l option uW quand un pr dicat appel n est pas d fini Z 0 aucun message n est donn 1 pr vient en cours d ex cution de l effacement de block_exit I ou block _exit 2 avec une variable libre la place du num ro d erreur load 2 ou reload 2 avec une d
382. r complet est donc full identifier prefix prefix_limit abbreviated_identifier prefix_limit ee prefix name prefix_limit name abbreviated identifier name name letter letter digit _ Ainsi les identificateurs complets suivants sont corrects et repr sentent tous des identificateurs diff rents peter grammar plural data peter grammar name sys write lexicon name Base Normal toto L identificateur suivant n est pas un identificateur complet peter Note il est important de pouvoir distinguer syntaxiquement les identificateurs complets des identificateurs abr g s La d termination du nom complet a associer a un nom abr g est r alis e partir du contexte de lecture et d criture cette notion est d velopp e plus loin Il faut galement souligner que le n est PAS un op rateur le nom ne repr sente pas un objet s cable seule la cha ne de caract res qui le repr sente est d composable Lorsqu on parle de nom abr g on parle donc de la cha ne de caract res correspondante seul le contexte de lecture permet de d terminer de quel objet Prolog il s agit E S avec conventions de nommage contexte analyse identificateur abr g gt identificateur complet identificateur cha ne de caract res cha ne de caract res objet Prolog ProloglA 7 Prolog LIE PIT AZT AEN AGE Structuration et modification des r gles R3 7 Les Prolog classiques peuv
383. r droit de l objet apr s cr ation b peut tre nil sys get_event ou un identificateur de r gle Dans ce dernier cas chaque activation du bouton le but 0 est lanc new_drawing_area o p v lt x1 y1 x2 y2 gt r2 l new_drawing_area o p v lt x1 y1 x2 v2 gt l Cr e une zone graphique identifi e par o Elle est inscrite dans un rectangle de coordonn es x y1 x2 y2 dans la fen tre parente p Elle sera visible selon la valeur de v r2 a la m me signification que dans le pr dicat create_window syst me de coordonn es locales est une liste d options ventuellement vide nil form e partir des identificateurs no_border si l on ne veut pas de bordure autour de la zone save pour avoir un bitmap de sauvegarde top_attach left_attach right_attach bottom_attach new_push button o p v s b lt x1 y1 x2 y2 gt new push button o p v s b lt x1 y1 x2 y2 gt 1 Cr e un push button identifi par o dont le texte est s dont les coordonn es sont x y1 x2 y2 dans la fen tre parente p Il sera visible selon la valeur de v Si x2 et y2 sont libres ils seront alors unifi s avec les coordonn es effectives du coin inf rieur droit de l objet apr s cr ation b peut tre nil sys get event ou un identificateur de r gle Dans ce dernier cas chaque activation du bouton le but b o est lanc est une liste d options ventuellement vide nil form e partir des identificateurs button
384. rClosing U 4 10 ddeCbServerUpdate U 4 10 ddeCleanup U 4 8 ddeDeclareAsClient U 4 9 ddeDeclareAsServer U 4 11 ddeEndConversation U 4 9 12 ddeExecute U 4 10 ddeHotLinkData U 4 9 ddePokeData U 4 10 ddePublishExternalEvent U 4 4 ddeRememberDatabase U 4 8 ddeRequestData U 4 9 ddeTransmitData U 4 12 ddeTransmitRequest U 4 9 ddeWarmLinkData U 4 9 debug R 3 25 debug R 6 17 24 debug R 10 19 default R 2 8 default U 5 17 def array R 4 8 delay R 6 4 descripteur R 7 18 Dessin R 5 14 dessin m2 R 5 14 dessin m2 U 1 3 dessin mo U 1 3 dictionary R 3 13 dictionary R 3 25 dictionary R 6 25 26 difR2 7 DIRECT C FUNCTION R 7 18 26 discontiguous R 3 23 discontiguous R 3 28 DISTANCE U 5 8 ProloglA 1 4 Index Prolog II Windows distance U 5 8 divR4 4 dot R 4 1 double R 4 1 5 DOUBLE ARRAY R 7 18 21 double quotes R 10 19 Drawing area U 5 4 drawing area U 5 17 draw_equR 5 11 draw mode R 5 12 draw tree R 5 12 dynamic R 3 23 echo R 5 13 edinburg mo R 6 24 edinburg mo U 1 3 4 8 edinburg mo U 2 5 edinburgh R 6 24 EDIT U 5 3 7 edit R 3 27 edit R 6 3 4 edit U 5 7 17 Editfield U 5 4 editm R 3 14 27 editm R 6 3 edit_area R 5 2 edit field U 5 17 enable menu U 5 25 end module R 3 15 end of file R 10 15 16 end_of stream R 10 14 end screen U 5 6 ensure loaded R 3 23 enum R 4 12 eo
385. r_ field U 5 18 use_win h U 1 5 valR 4 3 val U2 7 var R 10 6 variables R 10 16 variable names R 10 16 var time R 4 2 version R 6 24 visibility U 5 19 vscroil U 5 15 16 wait U5 17 warning U 2 8 week R 6 4 width height U 5 19 write R 5 2 write R 10 18 J Prolog ERIMTAGE writeq R 10 18 write canonical R 10 18 write term R 10 18 R10 3 7 V V V R10 3 R10 2 R 1 23 R4 6 R10 2 R 10 2 3 R 10 2 11 ProloglA A Pole HERITAGE Index Prolog II Windows I 13 ProloglA HERITAGE Ref MPH II Fr MMX www prolog heritage org
386. ract res Sitest un n uplet est unifi avec la liste des arguments de f Sinon chec Exemple gt split abcde x x a p c q e nil gt split plusgrand Jean Pierre Marie x x plusgrand Jean Pierre Marie nil string _ident s s2 i string_ident s i Etablit la correspondance entre un identificateur et sa repr sentation sous forme de cha ne Si l identificateur n existe pas il est cr Dans la forme a trois arguments fait correspondre aux cha nes s et s2 l identificateur dont le pr fixe est s1 et la repr sentation abr g e s2 et vice versa Dans la forme deux arguments utilise le contexte courant de lecture criture pour tablir la relation entre l identificateur i et sa repr sentation s s peut tre une repr sen tation compl te ou une repr sentation abr g e Exemple gt string ident p i invites Jean p invites i Jean gt string ident invites Jean x x invites Jean Exemple dans le contexte standard gt string ident s sys outm s outm string _integer s n Fait correspondre la cha ne s l entier n et vice versa gt string integer s 123 s 123 gt string integer 0123 n n 123 string real s r Fait correspondre la cha ne s au r el r et vice versa gt string real s 12 34e5 string real s x s 1 234000000000000e 06 X 1 234000000000000e 06 gt string real s 1d110 string real s x s 1 000000000000000e 110
387. ran gr_polygon n L Dessine un polygone dans l unit graphique courante L est une liste de doublets lt x y gt indiquant les coordonn es des points d finissant le polygone Le premier argument n o n est un entier ou un identificateur d termine la proc dure appel e ProloglA J Prolog LITE Prolog HERITAGE Primitives graphiques U5 31 frame Dessine le p rim tre du polygone paint Remplit le polygone avec le motif associ au crayon erase Efface le contenu du polygone certaines des lignes bris es formant le contour du polygone peuvent subsister 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 hu Nh wo gr_arc n r al a2 ger_arc n x1 y1 x2 y2 al a2 Dessine un arc d ellipse inscrit dans le rectangle r entre les angles a1 et a2 Les angles a1 et a2 sont donn s en degr s Le premier argument n o n est un entier ou un identificateur d termine la proc dure appel e 0 frame Dessine l arc d ellipse paint Remplit le secteur d fini par l arc d ellipse avec le motif associ au crayon erase Efface l arc et le secteur invert Inverse la couleur de chaque point de l int rieur du secteur d ellipse Le r sultat est d pendant de la machine si le coloriage est autre que noir et blanc hu Nh Ww gt gr_arc frame 100 100 200 170 20 1
388. re quelconque il sera instanci si succ s a b Ooul c cha ne d un caract re d r el double pr cision f identificateur ou cha ne h i identificateur 1 liste m entier ou r el n entier r r el quelconque s cha ne t terme u V variable Fi Qi l argument peut tre quelconque il restera inchang apr s ex cution 1 Directives de compilation discontiguous i n dynamic i n ensure_loaded u include u initialization t module s module s 1 module s 11 12 module t 11 12 s multifile i n omodule s op n il i2 set_alias i a discontiguous foo 2 dynamic aa 2 ensure_loaded myfile include myfile initialization write end module Interface module room table glass module lex uncle son 1 ii module lexicon sys lex multifile foo 2 omodule Interface op 900 fy not set alias foo 122 PrologIA B 2 Annexe B set_prolog flag il i2 2 Pr dicats A abolish t abs m add m1 m2 add_implicit s1 s2 add_sentence_terminator c add _tlv v t i alloc Poole iiei JTAG set_prolog_flag unknown warning abolish myrule 2 val abs 1 5e0 1 5e val add 2 3E0 3 1E1 3 33E1 add_implicit sys outml add sentence terminator add _tlv V 33 foo alloc n1 n2 n3 n4 n5 n6
389. recharg dans n importe quel tat initial avec la commande load Vous pouvez aussi cr er directement un nouvel tat initial par la commande exit nouvel etat po Nous nous placerons dans ce dernier cas pour la suite nouvel _etat po est alors un fichier contenant l tat initial augment de la r gle d appel compil e par Prolog ProloglA J Prolog LIE RYT AIEEE CIS LATE Ajout de r gles externes m thode des parasites D 3 2 Cr er une nouvelle Machine prolog contenant le programme externe Ecrire le programme externe en utilisant les fonctions de communication d crites au R 7 1 et le compiler avec le compilateur appropri Mettre jour le module utilisateur prouser correspondant voir D 3 et le compiler Refaire l dition de liens entre les nouveaux modules et ceux qui constituent Prolog se r f rer au U 2 7 pour les commandes exactes pour votre machine Il suffit ensuite d utiliser la nouvelle Machine Prolog avec l tat initial augment D 2 R gle Prolog r alisant l interface L appel sous Prolog d une fonction externe se fait au moyen d une r gle satisfaisant les conditions suivantes la t te de la r gle est un identificateur suivi par des arguments qui sont des variables libres la queue de la r gle contient un parasite repr sent par un nombre pr c d de Exemple la r gle relais pour find_ pattern est sys find pattern s1i s2 n gt 201 Le
390. res celles ci sont d abord transform es en listes de caract res avant de r aliser l appel phrase somme X 1 2 3 est transform automatiquement dans l appel phrase somme X 1 A n ai 1 Ae n r 3 D PrologIA Z sie sub_atom A1 N1 N2 N3 A2 Extensions Edinburgh R10 11 Fait un succ s si l identificateur A qui doit tre connu lors de l appel peut tre vu comme la concat nation de trois parties telles que N soit la longueur de la premi re partie V2 la longueur de la seconde partie qui n est rien d autre que l identificateur 42 et N3 la longueur de la troisi me partie Les pr fixes des identificateurs A1 et A2 sont ignor s en entr e ou gaux en sortie Exemples sub atom abracadabra 0 5 A 82 A 6 S2 abrac sub_atom abracadabra _ 5 0 S2 S2 dabra sub_atom abracadabra 3 L 3 S2 L 5 S2 acada sub_atom abracadabra B 2 A ab B 0 A 9 B 7 A 2 sub_atom Banana 3 2 A S2 A 1 S2 an sub_atom charity B 3 A S2 B 0 A 4 S2 cha B 1 A 3 S2 har B 2 A 2 S2 ari B 3 A 1 S2 rit B 4 A 0 S2 ity sub_atom ab Start Length A Sub_atom Start 0 Length 0 A 2 Sub atom Start 0 Length 1 A 1 Sub_atom a Start 0 Length 2 A 0 Sub_atom ab Start 1 Length 0 A 1 Sub_atom Start 1 Length 1 A 0 Sub_atom b Start 2 Length 0 A 0 Sub_atom 10 4 3 Comparaison de termes quelconques X You X Y Succ s si X e
391. res verticales gauche pour les barres horizontales scrollb range concerne l intervalle de valeurs de la scrollbar v est un entier S il est positif les valeurs seront comprises entre 0 et v S il est n gatif les valeurs seront comprises entre v et v ProloglA Prolog U5 20 Manuel d Utilisation Windows ERITAGE scrollb_step v est un entier il d signe l amplitude du d placement l mentaire du curseur lorsqu une fl che de scroll est activ e L amplitude minimum est 1 c est aussi la valeur par d faut Pour obtenir la nouvelle position il faut enlever ou ajouter v la position actuelle s get_local object p n o Unifie o avec l identification de l objet de parent p et de rang local n dans p s get_objects p _o Unifie _o avec la liste des objets dont le parent est p 5 3 3 Gestion des v nements s get_event b e o Teste si un v nement de type d fini par e concernant l objet o est pr sent dans la queue d v nements de Prolog Si c est le cas le premier v nement correspondant le plus ancien dans le temps est lu donc supprim de la queue et l unification des arguments est tent e Sinon gef_ event agit en fonction de b qui doit tre connu l appel Si b vaut 0 get event n est pas bloquant et g n re un backtracking Si b vaut 1 get event est bloquant et un tel v nement est attendu puis lu et enfin l unification tent e o est soit l identification d un objet soit une variable
392. ression des arguments sous l interpr teur de commande du debugger uniquement la pr sentation des informations dont un param tre d indentation des messages un param tre de pr cision ou profondeur d impression le choix des informations sur les erreurs entre deux points d arr t pendant la trace ProloglA J Prolog LIE PIT AZT AEN AGE L environnement R6 17 Une configuration standard est pr d finie Elle comprend arr t sur le prochain but impression avant unification aucune indentation impression des termes par out en profondeur 4 impression d un message et de la pile de r cursion sur les erreurs Des commandes de l outil de mise au point permettent de conna tre sa configuration et toute autre information relative la mise au point l tat des options la liste des points d arr t actifs la liste des pr dicats non d velopp s en trace la liste des commandes de l outil Voir les commandes du debugger S b j h et la r gle pr d finie show spy 6 6 3 Activation d un mode de mise au point L outil de mise au point est activ d s l effacement de l un des pr dicats pr d finis trace 0 trace 1 debug 0 debug 1 ou debug 2 Il est d sactiv par l effacement de l un des pr dicats pr d finis no_trace 0 ou no_debug 0 Un drapeau permet de d finir la configuration de d marrage Il vaut la somme des valeurs choisies parmi 1 arr t sur le premier appel de but 2 arr t sur le premier
393. rgument et non explicitement pr fix s 0 Ces atomes ne seront pas pr fix s attribution du pr fixe vide 1 Ces atomes seront pr fix s en fonction du contexte A r allocation La valeur d termine si l on doit interdire ou permettre la r allocation de l espace concern 1 Toutes les r allocations sont interdites ProloglA Prolog U2 6 Manuel d Utilisation Windows ERITAGE 0 Toutes les r allocations sont permises c resp C La r allocation du code est interdite resp permise d resp D La r allocation du dictionnaire est interdite resp permise h resp H La r allocation de la pile de copie heap est interdite resp permise s resp S La r allocation de la pile de r cursion stack est interdite resp permise t resp T La r allocation de la pile de restauration trail est interdite resp permise c codage des caract res La valeur d termine le type de codage interne des caract res I codage selon le jeu ISO 8859 1 M codage selon le jeu de la machine h te e escape mode D termine le mode d impression des caract res accentu s n appartenant pas au jeu de la machine h te Ce flag n a de signification qu en mode de codage ISO Les valeurs possibles sont 0 le caract re est crit comme une s quence format_escape code octal cf R1 29 Cette option a la particularit de r duire l ensemble des caract res qui peuvent cr er une ambiguit pour l criture du cf R1 7
394. riable libre au moment de l appel Cette facilit consiste demander l utilisateur le nom du fichier par une boite de dialogue Ensuite le changement d unit d entr e ou de sortie est r alis normalement voir input output avec ouverture ventuelle du fichier En sortie unifie x avec le nom complet du fichier Il y a chec et aucune action r alis e si dans le dialogue de s lection de fichier le bouton Annuler est cliqu sfgetfile s sfgetfile s Filter NomInitial Point Affiche une zone de dialogue permettant de visualiser parmi les noms des fichiers se trouvant sur le s disque s ceux compatibles avec Filter et d en s lectionner un Point est un point de format lt x y gt indiquant l endroit o est affich le dialogue Ce dialogue comporte une liste de choix pour les fichiers propos s et un champ d dition initialis avec la cha ne Nominitial s est unifi avec la s lection faite par l utilisateur il s agit du nom complet du fichier comprend le chemin d acc s et le nom selectionn Le fichier n est pas ouvert La r gle choue si le bouton Annuler est press sfgetfile Point Ltypes Filter S Affiche une zone de dialogue permettant de visualiser parmi les fichiers se trouvant sur le s disque s les noms de ceux dont le type est mentionn dans la liste Ltypes et d en s lectionner un ProloglA U 5 40 Manuel d Utilisation Windows Point est un point de format lt x y gt i
395. rimant ventuellement un warning Exemple data 1 gt 3Cela d pend du niveau de warning choisi par une option au lancement de Prolog 4Cela d pend du niveau de warning choisi par une option au lancement de Prolog ProloglA fs A Prolog R 3 32 Manuel de R f rence ERA data 2 gt data 3 gt gt data x x 1 x 2 x 3 gt suppress data 1 2 gt data x x 1 x 3 3 8 Manipulation des modules compil s index i a Indexation d un paquet de r gles compil es Provoque l indexation sur le 1er argument du paquet de r gles compil es dont l identificateur d acc s est i et l arit a Ne fait rien si la r gle est d j index e Cette r gle peut tre utilis e pour acc l rer l ex cution des r gles cr es par assert qui ne sont pas index es automatiquement contrairement celles cr es par insert N a pas d effet sur les faits non compil s kill module s Suppression de module s doit tre une cha ne ou une liste de cha nes Pour chaque module d sign dans s toutes les r gles du module sont supprim es les tableaux du module sont d sallou s et les assignations des identificateurs du module sont d faites Un message est ventuellement affich quand un module n existe pas et le traitement se poursuit load f 1 load f Chargement de modules sauv s fest un nom de fichier cha ne de caract res et est une liste de substitution de pr fixes
396. ription de module Est utilis lors de l dition de liens L utilisateur doit y rajouter les noms des Callbacks qu il d sire exporter s il y a lieu voir SDK Windows prolog lib Librairie contenant les fonctions de Prolog prolog res Fichier compil des ressources de Prolog prouser c prouser obj Fichiers source et objet de l interface externe C use_win h Fichier source a inclure obligatoirement dans les modules utilisateur crits en C pour assurer leur compatibilit avec l environnement fen tr de prolog 1 2 4 Extensions en code16 bits r serv Windows 3 1 2 4 1 Principe des extensions 16 bits Les extensions 16 bits sont localis es dans une DLL r alisable au moyen du SDK standard de Windows 3 sans modification de l ex cutable 32 bits Cette DLL est charg e automatiquement d s l invocation d une r gle d extension situ e dans la plage r serv e et d charg e lorsque Prolog se termine Sa localisation ob it aux r gles suivantes La DLL doit se trouver au m me endroit que l ex cutable 32 bits de Prolog et son nom doit tre le m me sauf le dernier caract re qui est remplac par un et l extension qui est DLL exemple c prolog prolog exe correspond c prolog prolo dil Attention il est possible de lancer plusieurs instances d une application Prolog la DLL d extensions 16 bits sera alors partag e Ceci peut entra ner des conflits au niveau des donn es priv es que la DLL maintient
397. rne binary string qui est une valeur en m moire et la visualisation de cette donn e print string c est dire sa repr sentation sous forme de caract res sur un canal d entr e ou de sortie E 2 Jeu ISO avantages et inconv nients Le choix du jeu ISO a l avantage d assurer la portabilit des modules sources ou binaires inter machines Il permet galement de manipuler des caract res qui n existent pas forc ment sur la machine h te par exemple les machines UNIX qui utilisent le jeu ASCII 7 bits notamment les caract res accentu s L inconv nient de ce choix pour Prolog qui est un langage tr s ouvert et qui r alise beaucoup d changes ou de partage de donn es est la diff rence de codage interne de certaines donn es cha nes entre Prolog et l ext rieur Ce qui n cessiterait de faire une transformation chaque communication avec l ext rieur En fait l utilisateur n en a pas forc ment toujours besoin cela d pend de l op ration qu il veut r aliser sur ces donn es Il peut les vouloir e encode ISO e encode h te en tant que donn e binary string e encode h te en tant que repr sentation print string En effet des proc dures qui manipulent les chaines sans en connaitre le sens par exemple find pattern qui compare ou substring qui d compose sont ind pendantes d un code particulier et n ont donc pas besoin de transformations Par contre des proc dures qui font appel au syst me h te en auront
398. rochain but qui n est pas un sous but en imprimant les informations de l ex cution de la portion de programme selon les options courantes choisies L effet de la commande gt est ignor dans ce cas p bool en print before unification L impression des buts avant unification est activ e si bool en vaut 1 ou d sactiv e si bool en vaut 0 Si bool en n est pas mentionn il quivaut 0 P bool en Print after unification L impression des buts apr s unification est activ e si bool en vaut 1 ou d sactiv e si bool en vaut 0 Si bool en n est pas mentionn il quivaut 0 ProloglA R 6 20 Manuel de R f rence q quit Quitte Prolog et retourne au niveau syst me h te S stack Affiche la pile Prolog des r gles en cours d ex cution s0 Permet d liminer l impression du message et de la pile Prolog lors d une erreur s la r tablit S State Affiche les options courantes t trace to spy Continue jusqu au prochain point d arr t fixe en imprimant les informations de l ex cution de la portion de programme selon les options courantes choisies T Trace to end Continue jusqu la fin du programme en imprimant les informations d ex cution selon les options courantes choisies w where Affiche la position du but courant dans le programme ident arit Met un point d arr t sur le paquet de r gles d identificateur d acc s ident et d arit arit Voir aussi le pr dicat spy id
399. rolog WTA NATE LITE A it sf zelig Le contr le de l effacement des buts R2 7 dift t2 La r gle pr d finie dif t t2 est utilis e pour contraindre et 2 repr senter toujours des objets diff rents D s que cette contrainte ne peut plus tre satisfaite on revient en arri re backtracking L implantation de dif utilise un m canisme similaire geler Voici deux primitives int ressantes que l on peut crire avec dif hors_de x 1 qui v rifie que x n appartiendra jamais la liste et fous differents l qui v rifie que les composants de la liste seront toujours diff rents deux deux hors de x nil gt hors de x y l gt dif x y hors de x 1 tous differents nil gt tous differents x l gt hors de x 1 tous differents 1 Avec ces deux primitives on peut par exemple crire un programme qui calcule des permutations il suffit de dire que l on a une liste d entiers et que tous les l ments de cette liste sont diff rents deux deux permutation x1 x2 x3 x4 gt tous_differents x1 x2 x3 x4 nil chiffre x1 chiffre x2 chiffre x3 chiffre x4 chiffre 1 gt chiffre 2 gt chiffre 3 gt chiffre 4 gt Remarquons que dans cet exemple Prolog met d abord en place toutes les in galit s avant d ex cuter le programme non d terministe classique Ceci donne une programmation plus claire et plus efficace L utilisation de dif permet galement l critur
400. ronnement R 6 23 On souhaite avoir la trace jusqu au prochain point d arr t avec seulement l impression apr s unification on d sactive donc l impression avant unification DBG po DBG t dessert Fraises chantilly value Truffes sous le sel Poulet au tilleul Fraises chantilly 901 RECALL 3 dessert Melon en surprise value Truffes sous le sel Poulet au tilleul Melon en surprise 734 smaller 734 800 d Melon_ en surprise p Poulet au tilleul RECALL 2 main course vi65 DBG pl On se trouve arr t sur un point d arr t fixe on s int resse aux pr dicats importants ils ont un point d arr t fixe jusqu la fin DBG meat 1 DBG fish 1 DBG b fish 1 main course 1 meal 3 meat 1 DBG G main course v623 CALL fish v623 fish Bar aux algues d Fraises chantilly p Bar aux algues d Melon_ en surprise p Bar aux algues RECALL 2 fish v6 23 fish Chapon farci d Fraises chantilly p Chapon farci d Melon_ en surprise p Chapon farci 6 7 Modification et visualisation de l tat courant alloc 12 D crit l tat des piles Prolog La version sans argument crit les valeurs courantes sur la sortie courante Les arguments s il sont pr sents sont unifi s respectivement avec l espace occup et l espace libre de 1 2 espace du code 3 4 pile de copie des structures heap 5 6 pile des environnements et variables locales stack 7 8 pile de restauration trail 9 10 esp
401. rs existants Si Prolog doit cr er ou lire un identificateur il consultera cette liste de repr sentations potentielles Pour abr ger d avantage l criture m me dans la d finition du contexte si on veut faire appara tre dans la liste explicite toute une famille d identificateurs au lieu de la mentionner de mani re exhaustive il suffit simplement de sp cifier son nom C est alors consid r comme une attribution implicite quivalant calculer la liste explicite qui en d coule et l ins rer dans la liste existante au moment de chaque op ration d attribution de pr fixe Propri t s e La liste des attributions implicites est trait e apr s la liste explicite e La liste des attributions implicites est trait e de gauche droite D o la d finition du contexte par une liste d attributions explicites de pr fixes une liste d attributions implicites de pr fixes un pr fixe par d faut pour les autres cas Et sa d finition en Prolog 3 4 4 et 3 4 5 set_context Id ListeExplicite Listelmplicite Defaut Ce contexte devient alors d pendant du temps dans la mesure o les familles d sign es pour une attribution implicite peuvent grandir avec le temps Pour se ramener un contexte sain et supprimer cette partie inconnue dans le cas d attributions implicites il est n cessaire de fermer la famille Cela signifie au moment de la fermeture de la famille la liste explicite qu elle repr sente
402. s ont des qualificateurs diff rents Il faut insister sur le fait que la suite prefixe suffixe n est pas une structure mais constitue un identificateur ins cable La notion de base est donc celle de partition des symboles de r gle ou noms des r gles qui induit une partition dans les r gles correspondantes Chaque partie est appel e un module Cette notion est parfaitement dynamique cr er une r gle avec un nom de r gle appartenant a une partition non encore utilis e correspond cr er un nouveau module Tous les modules sont situ s sur le m me plan et il n existe pas de notion de modules imbriqu s Note Pour compatibilit avec l interpr teur Prolog II la syntaxe des pr fixes a t tendue de mani re pouvoir simuler une inclusion en permettant l utilisation du s parateur l int rieur du pr fixe Par exemple Base Normal data est un identificateur ayant pour pr fixe Base Normal et pour suffixe data 3 1 2 Qualification des foncteurs Pour garder la sym trie entre les donn es et les programmes le m me partitionnement est utilis pour les symboles de r gles et les symboles de foncteurs La qualification des foncteurs permet galement de garantir que certains noms n interf reront pas avec d autres modules d signation d un fichier temporaire type de donn e opaque Pour clarifier les notations il a t cr une notation sp cifique pour certains foncteurs dits g n riques Ces f
403. s appels crois s c est dire la prochaine inf rence Lorsque la fonction se termine la d monstration suspendue reprend son cours normalement Il est possible de communiquer entre les deux environnements par l interm diaire des donn es statiques base de faits tableaux assignations Ce m canisme permet donc de suspendre l ex cution en cours et d empiler l activation d une nouvelle machine Prolog pour traiter l interruption 9 1 Concepts La machine Prolog poss de un vecteur de bits d v nements externes Les huit premiers bits bits 0 7 sont r serv s pour des v nements d finis par l utilisateur A chaque bit doit tre associ e une fonction C pour la construction des arguments et l appel d un but Prolog Cette fonction C est install e par l utilisateur en appelant la proc dure pro_signal L interruption d un programme Prolog ne peut tre servie qu en certains tats pr cis tels que la fin d une unification ou l int rieur d un pr dicat valuable Cette interruption doit donc tre m moris e jusqu ce que la machine Prolog soit en tat de la traiter Ceci est r alis par la proc dure send_prolog interrupt qui doit tre appel e par le gestionnaire d interruption pour signaler Prolog cet v nement Pour lier un programme Prolog un v nement asynchrone donn il faut donc r aliser les op rations suivantes 1 Choisir un bit 0 7 et le repr senter par un masque par exemple myEvent
404. s comme clients un fichier nomm ddecligo p2 disponible dans le kit fournit des commandes simplifi es adapt es cet exemple Dans tous les cas lancer la r gle to_ begin pour d marrer ces programmes Ils listent alors leur mode d emploi Les manipulations suivantes sont sugg r es En premier remplir le garde manger initialement vide le patron lance par exemple une requ te Execute de la cha ne 4 Lapin 15 Poulet 7 Gateau Basque end Essayer de connecter un second patron surtout si le premier est d j abonn Rupture Essayer de r clamer un plat indisponible Requ te Poke de nom du plat 1 par exemple V rifier que le patron est pr venu lorsque les stocks diminuent ProloglA J Prolog LIE RITA EE LEI YL J Prolog LIE PIT AZT AEN AGE 5 1 5 2 5 3 5 4 5 5 5 6 57 5 8 5 9 5 10 5 Primitives Graphiques Description du syst me graphique Primitives de gestion des fen tres Primitives l mentaires de gestion des objets attach s une fen tre Primitives sp cifiques pour la gestion de menu Mode de dessin et d criture Dessin et positionnement Position de la souris dans une zone graphique Primitives sp ciales de saisie R gles pour g rer des objets structur s Envoi d v nements Prolog depuis un objet externe Le syst me Prolog II comporte un dispositif asynchrone de gestion des v nements permettant le fonctionnement de l environnement fen
405. s dans chacune des deux listes Les param tres de chacun de ces pr dicats sont impos s le premier param tre sera la variable attribu e elle m me le second sera le terme avec lequel on essaie de l unifier et le troisi me sera le terme attribu correspondant dans la liste Le lien d un terme avec une variable peut s effectuer au moyen de deux pr dicats pr d finis new_tlv 3 et add_tlv 3 TLV Term Linked to Variable new_tlv v t i Attache la variable v le terme r La liste de termes attribu s la variable v sera donc r duite un seul l ment le terme f Si v tait d ja une variable attribu e l ancienne liste est perdue Si v n est pas une variable une erreur est g n r e Le troisi me argument i doit tre un identificateur il s agit du nom de la r gle utilisateur d crite plus haut d arit 3 qui sera appel e lors d une tentative d unification de la variable v avec un terme connu ou bien avec une autre variable attribu e add_tlv v t i Ajoute la variable v le terme t La liste de termes attribu s la variable v sera donc augment e d un l ment le terme Si v n tait pas d ja une variable attribu e ce pr dicat a le m me effet que le pr c dent Si v n est pas une variable une erreur est g n r e Le troisi me argument 7 a la m me signification que pr c demment L ordre dans lequel les pr dicats utilisateurs seront appel s n est pas sp cifi Exemple gt insert r
406. s dans une zone graphique Un v nement clic peut tre utilis pour s lectionner pour d clencher un traitement de mani re asynchrone ou encore simplement pour d signer un point d un objet de type GRAPHICS Les primitives d crites ci dessous concernent l unit graphique courante qui peut tre une fen tre de type GRAPHICS ou une drawing area or 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 dans l unit graphique courante du point o se trouvait la souris lorsque cet v nement appel clic s est produit Sinon agit selon b b est un bool en qui doit tre connu au moment de l appel avec la signification b 1 Attendre qu un nouveau clic se produise dans l unit graphique courante b 0 Nepas attendre et r aliser un backtracking s gr_click b x y Teste si un v nement clic dans l unit graphique courante est pr sent dans la queue des v nements Si c est le cas x et y sont unifi s avec les coordonn es du clic dans l unit graphique courante et l v nement est supprim de la queue Sinon agit selon b b est un bool en qui doit tre connu au moment de l appel avec la signification b 1 Attendre qu un nouveau clic se produise dans l unit graphique courante b 0 Nepas attendre et r aliser un backtracking Voir aussi la primitive get_event gr_click b x y m I
407. s de figures est alors assez complexe cela d pend du fait qu il y ait ou pas une indexation sur le paquet de r gles en question de la position de la r gle modifi e par rapport la r gle du m me paquet en cours d ex cution du type du premier argument du but variable constante Les n uplets Le type n uplet n est pas d fini dans la norme Prolog En termes d quivalence nous pouvons dire que le terme f a a2 an o fest un atome est quivalent au n uplet lt gt f al a2 an sauf dans le cas o n 0 f n est pas quivalent lt gt f A 2 Fonctionalit s non implant es Les directives char conversion 2 et current char conversion 2 ne sont pas implant es A 3 Fonctionalit s restreintes La directive multifile est quivalente la directive discontiguous 1 la notion de fichier n tant pas prise en compte par la compilation Seule la valeur offest prise en compte pour le second param tre de la directive de compilation et primitive set prolog flag 2 dans le cas o le premier vaut char_conversion ProloglA Annexe B Liste des directives et pr dicats pr d finis constante identificateur entier r el ou cha ne canal ou alias entier opaque ou identificateur unit console ou nom de fichier ou nom de fen tre cha ne ou atome l argument doit tre instanci m me partiellement l argument doit tre une variable instanci si succ s l argument peut t
408. s diff rents types possibles sont console pour l unit cr e automatiquement par Prolog au d marrage text pour un fichier disque au format texte binary pour un fichier disque au format binaire memory_file pour un fichier m moire d crit ci apr s unix_pipe pour un tube de communication inter processus UNIX graphic area tty_area edit_area pour des unit s graphiques Les unit s fen tres peuvent aussi tre repr sent es par des entiers ProloglA R5 2 5 1 Manuel de R f rence Les diff rents modes d ouverture possibles sont read pour la lecture write pour l criture Si l objet physique un fichier disque par exemple du m me nom existe d ja son contenu sera effac et remplac par les sorties qui seront demand es append pour l criture Ce mode est sp cifique aux fichiers Si un objet physique associ existe d j il est ouvert et les futures critures y seront ajout es en fin Ce mode d ouverture peut tre d fini par une convention de nommage de l unit dont le nom doit dans ce cas se terminer par Le fichier associ l unit est alors celui de nom donn apr s avoir t le Par exemple output file va provoquer l ouverture du fichier de nom file en mode append Certaines unit s peuvent tre ouvertes la fois en lecture et en criture C est le cas des types console tty_area edit area et memory file memory_file s
409. senter des caract res qui n existent pas sur la machine h te voir le paragraphe 1 9 5 Au moyen du nombre qui est son code interne tout caract re peut tre sp cifi dans une cha ne Par exemple les expressions 033 et x1B d finissent toutes deux une cha ne compos e de l unique caract re dont le code est 27 Le caract re nul 1 e celui dont le codage interne est le nombre 0 ne doit pas figurer dans les cha nes de caract res Une cha ne de caract res peut s tendre sur plusieurs lignes Pour cela le dernier caract re de chacune des lignes en question sauf la derni re doit tre le et le caract re de fin de ligne seront ignor s Par exemple l expression PrologIA J Prolog TA NAT LITE J Prolog LIE RYT AIEEE CIS LATE 1 5 El ments de base R1 9 ceci est une chai ne sur deux lignes d finit la m me cha ne que ceci est une cha ne sur deux lignes En Prolog le type cha ne de caract re existe et une cha ne de caract res repr sente donc un objet de ce type En syntaxe Edinburgh une option de d marrage permet de d finir l interpr tation syntaxique de cette unit lexicale qui peut repr senter un des termes suivants un identificateur une liste d identificateurs d une lettre une liste d entiers une cha ne Prolog N B En crivant des programmes Prolog il arrive qu une donn e symbolique puisse tre repr sent e soit par une cha ne de caract res soit p
410. separatorP MeN LE lt gt n special_char 04 mnt Watt pie HAL mon mn special char a graphic char g g amp Wen mom won jn nn Man nom EME many mon us x A nan is graphic_char ere character letter digit separator graphic char special_char Sans changer le sens de ce qui est crit on peut ins rer des espaces n importe ou sauf dans les constantes et les variables On peut enlever des espaces n importe ou sauf dans les chaines et sauf si cette suppression provoque la cr ation de nouvelles constantes ou variables par juxtaposition d anciennes l NBSP est l espace non s cable PrologIA E J Prolog ebay 6 LITE J Prolog WIAA SAT S LAGE 1 3 El ments de base R1 3 Il existe diverses mani res d introduire des commentaires dans les programmes Du point de vue de la syntaxe un commentaire quivaut a un blanc et peut figurer partout o un blanc est permis e Le caract re indique le d but d un commentaire qui s tend depuis le jusqu la fin de la ligne o ce commentaire appara t e Les symboles et servent aussi d finir des commentaires constitu s par ces symboles et la suite des caract res qu ils encadrent On ne doit pas m langer ces symboles un commentaire commen ant par doit se terminer par et un commentaire commen ant par doit se terminer par D autr
411. sert emp cher que les autres additions redondantes soient calcul es Exemple 3 Cet exemple montre comment utiliser une variable pour contr ler un programme de l ext rieur La r gle liste de un qui a t donn e dans un exemple pr c dent bouclait Pour emp cher cette boucle on utilise simplement une condition externe ongueur I n qui v rifie que la longueur d une liste est inf rieure ou gale n longueur l n gt freeze 1 longueur 1 n longueur nil n gt PrologIA J Prolog LIE PIT AZT AEN AGE Le contr le de l effacement des buts R2 11 longueur e l n gt dif n 0 val n 1 n longueur 1 n liste_de_un 1 x gt liste_de_un x liste_de_un nil gt gt longueur 1 5 liste de un l 1 1 1 1 1 1 nil LS Quand tous les buts ont t effac s il se peut qu il reste encore certains buts gel s sur des variables qui sont encore libres Remarque Les optimisations de compilation ne permettent pas de d clencher les buts gel s d s l unification de la t te de r gle mais seulement sur le premier but de la queue non optimis En particulier l exemple suivant chouera gt insert nombre lt i gt gt integer i lier lt 1 gt gt gt freeze x lier x nombre x gt En effet les pr dicats de test de type tant optimis s le d gel de ier lt i gt ne se fera pas puisqu il n y a pas d autres buts dans la queue de nombre 1
412. sert a b c asserta X Ajoute en t te de paquet la r gle ou le fait X Voir asserta d crit pour Prolog II M me remarque sur la virgule que ci dessus clause T Q T ne doit pas tre une variable libre 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 avec la diff rence qu une queue vide est repr sent e par true et qu une queue d au moins deux litt raux est repr sent e par une structure avec le noeud consult F reconsult F Est quivalent respectivement a insert et reinsert Si F est un identificateur c est la chaine correspondant a son abr viation qui est prise en compte comme nom de fichier c d le pr fixe est ignor Si F vaut user ou user lit sur l unit courante de lecture ProloglA Prolog R 10 6 Manuel de R f rence HERITAGE listing listing X Est quivalent respectivement list et list X retract X M me comportement que retract deux arguments X doit tre un fait ou une r gle dont le pr dicat de t te est instanci retract T true est quivalent retract T retract T est quivalent retract T si T ne s unifie pas avec T1 T2 retract T Q est quivalent a retract T Q retractall X Toutes les r gles dont la t te s unifie avec X sont supprim es sans unification de X ni backtracking X doit avoir la forme d une t te de r gle sinon le pr dicat
413. signification des arguments est la suivante bool qui est de type int a valeur bool enne indique le mode de traitement d sir si bool est non nul on d sire traiter l v nement imm diatement et dans ce cas str qui est de type char repr sente le but Prolog a appeler no intl int2 sont ignor s si bool vaut 0 on veut poster l v nement dans la queue de Prolog et dans ce cas no qui est de type int pourra servir identifier l objet ProloglA J Dole ECRITAGE J Prolog HERITAGE Primitives graphiques U5 49 intl int2 qui sont de type int et str ont des valeurs dont les significations sont laiss es libres l utilisateur Cet venement sera accessible par les pr dicats de lecture d v nements get_event b e o et peek event b e o ou o sera unifi avec no e sera unifi avec le terme Prolog extern_event str intl int2 ProloglA Prolig U 5 50 Manuel d Utilisation Windows HERITA GE ProloglA rb La G LE RITA TOI LITE AR1 23 SR2 4 R4 6 R 10 3 R 1 23 R 10 3 ae R 23 R4 6 R 1043 R 1 23 R10 2 3 R10 2 3 R1 23 R10 2 3 gt R10 2 gt R10 2 3 R1 23 R10 3 R10 3 7 R 1 23 R4 6 R10 2 R10 2 lt R 1 23 lt R10 2 7 lt lt R 1 23 lt lt R4 6 lt lt R 10 3 R10 2 3 R 10 2 8 R1 23 R10 2 7 lt R1 23 Index lt R 10 2 7 R 10 2 11 R 4 4 R10 23 2 7 gt R1 23 gt R10 2 7 gt R 1 23 gt
414. son d indexation cf pr dicat init_fassert Exemple gt freplace myrule 1 2 3 x y 2 t 7 345 freplace i a n reg n_arg tl Remplacer un argument non index dans un fait non compil Remplace dans le fait de rang n reg du paquet d identificateur i et d arit a l argument de rang n_arg par le terme t1 Ce fait aura d tre cr par l un des pr dicats fasserta ou fassertz Cet argument ne doit pas intervenir dans une combinaison d indexation cf pr dicat init fassert Exemple gt freplace myrule 7 2 7 345 fretract t Supprimer rapidement un fait non compil correspondant un mod le S efface autant de fois qu il existe de faits s unifiant avec La recherche de tels faits est tr s rapide et profite des optimisations mises en place pour l acc s aux faits non compil s Ces faits auront d tre cr s par l un des pr dicats fasserta ou fassertz D s qu un fait s unifiant avec f est trouv il est supprim Si un fait qui convient est invisible la d compilation il est supprim et la primitive s efface sans unifier les variables libres de t Exemple gt fretract myrule 1 2 3 x y Z t fretractall t Supprimer rapidement des faits non compil s correspondant un mod le Supprime en une fois de mani re tr s efficace tous les faits s unifiant avec t Ces faits doivent tre des faits non compil s cr s par l un des pr dicats fasserta ou fassertz t doit permettre d identifier
415. ssoossoosssoosssseessoesssose R3 1 3 14 TMGO AUC CO thes street me E tre R3 1 3 1 1 Quahification des pr dicats ss R3 1 3 1 2 Qualification des foncteurs R3 2 3 1 3 Simplification des notations R3 3 3 1 4 Quelques r gles simples d utilisation R3 3 3 1 5 Modules et pr fixes standard R3 4 3 2 Terminologie RS UN na te natin tata R3 5 3 3 Syntaxe des Identificateuts ire mania R3 6 3 3 1 Param trage de l criture d un identificateur complet R 3 7 3 4 Contexte de Lecture et Ecriture R3 8 AAG SIS OA OR EE ho ch hae ta Ri a R3 8 2 42 MOMS ane dti R3 8 3 4 3 Notation simplifi e de la suite d identificateurs HA CONTEXTE AMRIT CE OE AY BRAT nr Par R3 9 344 Notation en Prolog assises R3 11 3 4 5 Primitives pour les contextes et les familles HERAT IC ALC UIES sen ve Seersesente R3 11 3 9 Modules ts user dates R3 13 3 5 1 D finition d un modules 5e ins R3 14 3 5 2 Module SOMNC ES 2 SN cer es ne R3 14 3 3 3 Module OD yet saine ail R3 17 ProloglA 7 Prolog LIE PIT AZT AEN AGE G n ralit s 3 6 R sum ou Approche simplifi e des identificateurs contextes et modules Een ee uate ei en ne R3 17 3 6 1 ACNE CATING aise acini anne ne R3 17 3 6 2 Notation abr g e et contextes R3 18 210 2 Module Sanana nn a a e a R3 19 3 7 Ajout suppression et recherche de r gles R 3 20 3
416. st formellement gal Y sinon chec Exemples 1 Le be Il Il be x x m Il Il I I HK Ha D X You X Y Succ s si X n est pas formellement gal Y sinon chec Exemples 1 1 2 x Be 2 Il Il Ha ProloglA R 10 12 Manuel de R f rence X lt Y Compare les termes X et Y fait un succ s si X pr c de Y choue sinon X gt Y Compare les termes X et Y fait un succ s si Y pr c de X choue sinon X gt Y Compare les termes X et Y fait un succ s si Y pr c de ou est formellement gal a_X choue sinon X lt Y Compare les termes X et Y fait un succ s si X pr c de ou est formellement gal Y choue sinon Quelques exemples 1 0 lt 1 lt aardvark zebra lt short short short lt shorter lt foo a foo b lt foo a b north a lt X X Y lt X lt lt foo X a foo Y b foo gt foo 1 2 3 gt 1 1 3 4 1 2 gt lt gt 1 2 1 2 gt lt gt X 10 5 Les entr es sorties 10 5 1 G n ralit s A l ouverture d une unit d entr e sortie pr dicats open 3 et open 4 un argument de sortie qui doit obligatoirement tre une variable libre lors de l appel est unifi avec une constante en l occ
417. statiques de tous les modules espace pour le dictionnaire qui contient tous les identificateurs et les acc s aux r gles cr s durant la session Le syst me Prolog II comporte un m canisme de r cup ration et tassage des piles et des espaces ainsi qu un m canisme de r allocation Pendant les op rations qui consomment les piles ou les espaces assert insert def_array r cursivit non terminale ces piles ou espaces peuvent arriver saturation Le m canisme de r cup ration d espace et de tassage est alors d clench automatiquement Si malgr cela la place libre restant dans la pile ou l espace est toujours insuffisante le m canisme de r allocation est son tour d clench automatiquement Il est charg de r allouer la pile ou l espace en cause avec une taille sup rieure de 25 ce qu elle tait Ce pourcentage est celui par d faut Il est possible de le modifier l aide d une option sur la ligne de commande au d marrage de Prolog cf U2 3 Il est possible de d clencher explicitement un des deux m canismes sur une pile ou un espace l aide des pr dicats gc et realloc gc x d clenche la r cup ration et le tassage de l espace d sign par x x peut prendre les valeurs suivantes code pour l espace du code dictionary pour l espace du dictionnaire stacks pour les piles qui ne peuvent pas tre dissoci es pour cette op ration ProloglA R 6 26 Manuel de R f rence
418. sur l ex cution Pour d tailler l tat du programme en cours d ex cution sur un but particulier on peut se poser les questions o en est on dans l ex cution du programme Et quelle r gle essaie t on d effacer pour a Sur chaque point d arr t le debugger permet de situer le but appel par rapport l arbre de r solution et par rapport la base de r gles ProloglA 2 J Prolog LITE HERITAGE L environnement R6 15 7 Prolog 72 ITA IF TT Quelle est la branche courante de l arbre de r solution AAAARB AAA RARAEA BG D ARAB AARARAREAARAAA AAA AAAAKA titi 1 rule number 1 toto 2 rule number 1 AKA AAA AAA AAAAAAKA AAA KAA AA AAAAAAAAKA BOTTOM AKA AAA AKA Quelle est la position du but dans le programme gt repas 3 rule number 1 goal number 3 in queue En fait la branche courante de la r solution est donn e par l tat de la pile de r cursion L optimisation de l appel terminal pratiqu e par la machine Prolog ne permet pas de visualiser les r gles pour lesquelles le but en cours d ex cution est le dernier de la queue Par exemple gt repas e p d CALL repas v156 v191 v226 DBG s ici la pile est vide puisque repas n est pas encore install PILE ISA RNANA ANTO DA RAAB IER IRSA A AKA AAA AAA AAAAAKA AKA KAKA AAA AAAAAAKA BOTTOM DBG CALL hors d oeuvre v156 DBG s ici elle contient repas puisque c est le but appelant eae eta ae Pew SUL Pi Re NCA a age a
419. t cr e pour un identificateur utiliser la r gle pr d finie string ident 3 vous permet toujours de voir quel est le pr fixe associ Pour viter d avoir qualifier des noms externes on peut les sp cifier dans l en t te du module l effet tant alors similaire une d claration d importation dans un langage classique Cela n exclut cependant pas d utiliser d autres noms pourvu qu ils soient explicitement qualifi s L exemple ci dessus peut ainsi s crire module grammar lexicon np nom_propre X gt np X end_module grammar 3 1 5 Modules et pr fixes standard Quand Prolog est lanc sans sp cifier d tat initial l tat initial standard de la m moire de travail fichier initial po est charg L tat initial comprend trois modules Le module qui contient les r gles pr d finies correspondant au pr fixe sys Les modules qui forment le superviseur dont les pr fixes sont de la forme r serv e sys Le module par d faut pour les programmes de l utilisateur correspondant au wey pr fixe vide ProloglA Z J Prolog LE RYT AEE CIS LATE Structuration et modification des r gles R3 5 3 2 Terminologie De nombreuses incompr hensions ayant r sult de l emploi des m mes mots pour d signer la fois une entit Prolog et la cha ne de caract res la repr sentant nous essayerons de donner ici une terminologie pr cise Si en Prolog norma
420. t 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 de machines couleur une grande zone peut demander une place m moire importante lt SA VE b gt ou lt save b gt b est un bool en indiquant si un bitmap de rafra chissement est associ la fen tre La valeur par d faut est b 0 Si b 1 un bitmap de rafra chissement de la taille de la fen tre est cr Exemple de cr ation d une fen tre graphique avec sauvegarde automatique gt new window query GRAPHICS lt SAVE 1 gt nil Les deux buts suivants sont quivalents gt new_window fen MODAL gt new_window fen GRAPHICS lt MODAL 1 gt nil create_window s t s r1 create_window s t v s r1 create _window s t v s r1 r2 Similaire new_window mais permet de d finir un syst me de coordonn es avec chelle 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 0 1 r2 est de la forme lt x1 y1 x2 y2 gt o x1 y1 x2 y2 sont des entiers d finissant un syst me de coordonn es locales propre l utilisateur Ce param tre n est pr ciser que pour des fen tres GRAPHICS et FRAMEPANEL Si le param tre r2 n est pas sp cifi les coordonn es graphiques dans la fen tre sero
421. t t1 t2 tn t repr sente t1 12 tn t e d crire id t t2 ty au lieu de lt id t t2 tn gt condition que id soit un identificateur et que n soit diff rent de 0 ProloglA Prolog R1 14 Manuel de R f rence ERITAGE Ceci conduit une notion plus g n rale de terme aiment Pierre Paul Jean nil pere_de x et le terme strict correspondant est lt aiment Pierre Paul Jean nil lt pere_de x gt gt Pour transformer un terme en un arbre il faut affecter ses variables par des arbres d o la notion d affectation sylvestre qui est un ensemble X de la forme X x1 r1 X2 72 o les x sont des variables distinctes et les ri des arbres Nous introduirons aussi la notation suivante si r1 r2 sont des arbres et si r1 r2 rn est une suite de n arbres alors r1 r2 et lt r1 r2 n gt repr sentent respectivement les arbres suivants e SESS sul gt rl 42 rl 2 rn Figure 1 8 Si est un terme strict faisant intervenir un sous ensemble de l ensemble des variables de l affectation sylvestre X x r1 x2 r2 alors l expression t X d signera l arbre obtenu en rempla ant les variables xj par les arbres correspondants rj Plus pr cis ment tX r si t xj t X valeur de k si est la constante k X t1 X t2 X si t t1 02 X tX t2 X si t 4 2 SIX Ss WX SIH gt UX gt t1 X
422. t initial po pour viter de refaire la m me commande chaque lancement de Prolog 5 1 4 Conventions utilis es dans ce chapitre Dans les r gles expos es dans ce chapitre x et y repr sentent les coordonn es horizontales x et verticales y L axe positif des x est dirig vers la droite L axe positif des y est dirig vers le bas Se rappeler que l origine par d faut i e x 0 y 0 coincide avec le coin int rieur sup rieur gauche de l l ment de r f rence Celui ci est la fen tre graphique courante pour un trac la fen tre parente pour un objet qui n est pas une fen tre et l cran pour une fen tre Les coordonn es x ou y peuvent tre exprim es indiff remment par des nombres entiers ou r els ProloglA fe A Prolog LITE Z J Prolog LE RYT AEE CIS LATE Primitives graphiques US5 7 De m me les variables commengant par r repr senteront des arbres d finissant un rectangle Cet arbre doit tre de la forme lt x1 yI gt lt x2 y2 gt ou bien lt x1 y1 x2 y2 gt o x y sont les coordonn es du coin sup rieur gauche et x2 y2 celles du coin inf rieur droit On appellera bool en un entier qui prend les valeurs 0 ou 1 et qui sert de valeur de v rit pour une propri t visibilit d un objet L utilisateur peut nommer un objet a l aide d une chaine cette identification pourra servir pour toutes les primitives de cr ation ou gestion de l objet Il peut galement laisser Prolog
423. t les formes simplifi es nil pour indiquer un trait de s paration horizontal Identificateur pour lt Identificateur Identificateur 0 gt lt Nom item Identificateur gt pour lt Nom item Identificateur 0 gt Lorsque le menu est s lectionn 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 sinon l erreur est propag par le m canisme block exit Exemple en supposant que la fen tre d dition menu p2 soit ouverte gt set menu 0 Compilation Compiler la fen tre lt Compiler la fen tre compilation fen gt set menu menu p2 l Compiler lt Compiler compilation fen gt gt insert compilation fen 0 gt front_window u reinsert u compilation fen u gt string u reinsert u gt 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 Chaque valeur repr sente elle m me une feuille ou une hi rarchie Il est possible d utiliser la place de ce doublet 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 quit gt lt Do goal1 lt Stop goal2 gt gt lt Size lt 1 sizel gt lt 2 s1
424. t read p 12 23 4 54210 34 43 p 12 Ju 23 u 4 onn 5 4 210 N 34g ue 43 0 nil Le pr dicat expression construit l arbre syntaxique associ la phrase lue si elle appartient au langage On peut ensuite communiquer cet arbre au pr dicat valuable val qui calcule et imprime sa valeur Tout ceci est fait par l appel de la r gle run D rivation formelle En analyse math matique la d rivation est une op ration qui une expression alg brique associe une autre expression alg brique appel e d riv e Les expressions sont construites sur les nombres les op rateurs des symboles fonctionnels comme sin cos et un certain nombre d inconnues La d rivation se fait par rapport l une de ces inconnues Dans notre exemple les nombres seront toujours entiers Nous n aurons qu une inconnue x et les seuls symboles fonctionnels unaires seront sin et cos La premi re partie du programme est la grammaire d analyse de ces expressions c est celle de l exemple pr c dent qui a t compl t e La voici grammaire des expressions expression e lt x y gt gt somme e lt x y gt somme e lt x y gt gt ProloglA 2 Prolog C 6 Annexe C HERITAGE produit p lt x z gt reste de somme p e lt z y gt produit p lt x y gt gt facteur f lt x Z gt reste de produit f p lt Z y gt facteur f lt x y gt gt primaire p lt x Z gt reste de facteu
425. t t b est l identificateur d acc s la base de donn es de boutons Cette r gle s efface si x y sont les coordonn es d un point l int rieur d un des boutons de la base b f est alors unifi avec le troisi me argument de la r gle pour le bouton concern La primitive gr_click combin e avec gr_button_hit permet d crire facilement une boucle de scrutation des boutons 5 8 2 Affichage de message avec validation s message_box t s m b x Cr e une fen tre graphique modale pour afficher un message Apr s saisie la fen tre est d truite et x est unifi avec le num ro du bouton de sortie La fen tre comporte un titre donn par la cha ne de caract res s une icone d finie par l identificateur parmi les valeurs warning info question wait error dont le dessin d pend de l environnement graphique de la machine un message donn par la cha ne de caract res m une ligne de boutons au plus 3 telle que si b est un entier il y aura b boutons dont les textes sont fonction de leur nombre et du type d icone et d pendent de l environnement graphique de la machine si b est une liste de cha nes chaque cha ne d finit le texte d un bouton Ceci peut tre sans effet sur certains environnements 5 8 3 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 ent un rectangle d dition dans l unit graphique courante qui doit tre une fen tre Dans le cas c
426. t term_cmp 1 2 nil lt X gt V v 1 gt term_cmpv X Y V Compare les termes X et Y la mani re de term_cmp mais sans prendre en compte les variables apparaissant dans les termes X et Y Pour le pr dicat term_cmpv deux variables distinctes sont consid r es comme identiques Exemple gt term cmpv foo Vi foo v2 V v 0 ProloglA R4 16 Manuel de R f rence Deux pr dicats de tri d une liste sont fournis sort 2 keysort 2 Pour effectuer ce tri ils utilisent de mani re interne le pr dicat term _cmp 3 d crit ci dessus sort L1 L2 L2 est unifi e avec la liste des l ments de L tri s dans l ordre croissant Dans cette liste les l ments multiples ne sont conserv s qu une seule fois Exemple gt sort 4 7 f00 3 4 1 nil L L 1 3 4 7 foo nil keysort L1 L2 L2 est unifi e avec la liste des l ments de Z tri s dans l ordre croissant Dans cette liste les l ments multiples sont conserv s Exemple gt keysort 4 7 fo0 3 4 1 nil L L 1 3 4 4 7 foo nil Ces m mes pr dicats admettent un argument suppl mentaire qui d signera le pr dicat utilisateur servant pour la comparaison des termes Ce pr dicat utilisateur devra tre d arit gale 3 Il recevra les termes comparer dans les 2 premiers et devra rendre dans le troisi me argument le r sultat de la comparaison 1 0 ou 1 sort L1 L2 C_ompar L2 est unifi e avec la liste des l ments de Z tri
427. t activ e les op rations arithm tiques peuvent donner lorsqu on d compile une r gle avec rule par exemple une suite de termes diff rente de la suite originale Il en est de m me pour le pr dicat block pour lequel la d compilation donnera dans certains cas un terme quivalent mais non identique Le debugger peut ne pas visualiser certaines op rations arithm tiques ou certains tests de type ou encore les arguments de certains pr dicats pr d finis optimis s tels que val assign ou block La valeur d termine si l optimisation est active ou pas 0 pas d optimisation Le programme appara t sous sa forme originale lorsqu on d compile ou lorsqu on utilise le debugger 1 optimisation C est la valeur par d faut L option s applique pour tout nouveau code produit par insert module ou assert r real La valeur d termine la syntaxe utiliser pour les r els P Prolog Notation Prolog II permet l utilisation simultan e avec la notation infix e des listes S Standard Notation standard les r els y sont crits sous forme abr g e et les listes en notation crochets Ex 1 2 3 s string Cette option n est prise en compte qu en mode Edinburgh La valeur d finit l interpr tation syntaxique de l unit lexicale string d crite au 1 4 du manuel de r f rence A Atom L unit repr sente un identificateur Il sera pr fix en fonction du contexte courant de lecture C Character L unit rep
428. t input alias1 set_line cursor n set line cursor 10 set_line_width n set line width 132 set_options s set_options vEw2 set_output h set_output alias1 set_prefix_limit c set prefix limit set_prolog flag il i2 set prolog flag unknown warning set_ stream position h n set stream position aliasl 200 setarg n t1 t2 setarg 3 1 2 3 4 5 1 2 3 setof v t 1 setof X frere X Y L show _spy v sin m val sin 3 14e0 X sort l 21 sort 43 31 52 12 L sort l 1 i sort 43 31 52 12 L mycompar split t 1 split father john father john split s 1 split abc a b 1c spy i n spy foo 2 sqrt m val sqrt 9 0e0 3 0e0 State Statistics statistics n1 n2 n3 n4 n5 2n6 n7 2n8 n9 n10 n11 n12 stream_property h 1 stream property aliasi1 alias X string t string abc string_double s d string double 1d0 X string double s d string_double X 1 2345678d15 string_ident s1 s2 i string_ident X john john string_ident s1 s2 i string ident user john X string_ident s i string ident john X string ident s i string ident X john string_integer s n string integer 123 X string_integer s n string integer X 123 string _real s r string real 12 E15 X string_real s r string real X 1 2E16 string _term s t string term err 500 X X s
429. t 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 nouvelles valeurs ProloglA U 5 44 Manuel d Utilisation Windows buttonD buttonD s buttonD s i D crit un bouton de terminaison de dialogue avec le label s auquel est associ l action 7 Usuellement s est la cha ne OK et i est nil Ce bouton est activable par un clic ou par la frappe d un Retour Chariot glist Lignes Colonnes Identificateur Liste Valeurs D finit un item de type liste de valeurs avec barre de d filement La signification des arguments est Lignes Entier repr sentant le nombre d items devant tre visibles La hauteur du rectangle est calcul e automatiquement en fonction de ce param tre Colonnes Entier repr sentant le nombre de caract res devant tre visible pour un item La largeur du rectangle est calcul e automatiquement en fonction de ce param tre Identificateur Identificateur servant donner un nom interne au gestionnaire Il est utilis pour donner le r sultat en sortie ListeValeurs Liste quelconque de constantes chaines identificateurs nombres qui repr sente la liste des valeurs pr sent es ou bien un triplet d crivant l tat initial
430. t lanc avec un tat initial Lorsque l on sort de Prolog avec la commande exit l tat courant du programme est sauvegard dans un fichier de code binaire qui pourra tre utilis plus tard comme nouvel tat initial Le fichier initial po qui vous est livr est un tat initial neuf c est a dire constitu uniquement d un superviseur et des r gles pr d finies Ce chapitre fournit une description de la fa on de lancer le compilateur Prolog I Windows d y cr er un programme et d en sortir Ce chapitre est destin galement d crire la fa on d utiliser les autres outils du kit Prolog I 2 1 Lancement et arr t de Prolog Pour commencer une session lancez l ex cutable Windows prolog exe par un moyen quelconque travers le Gestionnaire de Programmes partir d un shell Pour terminer une session lancez l un des buts Prolog quit ou exit ou utilisez l option Quitter du menu principal ProloglA U2 2 Manuel d Utilisation Windows 2 1 1 Activation fichiers par d faut Si aucun nom de fichier n est donn dans la commande de lancement le nom de fichier initial po est pris par d faut pour le fichier tat initial Exemple sous MS DOS win prolog Cette commande lance le compilateur avec l tat initial initial po recherch d abord dans le r pertoire courant puis avec le chemin indiqu dans la variable d environnement Pro ogDir2 Une erreur survient si un tel fichier n existe pas La commande
431. t qui doit tre compos d une suite de lignes du format suivant entier espace suite de caract res qui compose le texte de l erreur Il est possible de rajouter des messages dans ce fichier en respectant le format indiqu Il est conseill d utiliser des num ros de message au dela de 1000 6 6 Outil de mise au point de programmes Le debugger Prolog ou outil de mise au point de programmes permet une trace interactive des programmes sans modifier leur s mantique et sans consommation suppl mentaire de m moire Il permet entre autres de positionner des points d arr t de pister en pas pas avec saut ventuel de morceaux de programme d imprimer l tat de la d monstration en cours et de visualiser les backtracking Le pr dicat pr d fini statistics apr s une x cution du programme avec le debugger actif peut aider configurer les espaces de Prolog ProloglA R6 6 Manuel de R f rence HERI J Prolog LITE Note Le code optimis ne permet de reconstruire le source que de mani re quivalente et ne permet pas au debugger de visualiser toutes les informations s y rapportant Si l utilisateur d sire suivre une repr sentation exacte de son programme il faut que les r gles aient t compil es sans optimisation avec l option ad quate au lancement de Prolog 6 6 1 Mode trace L outil de mise au point mixe deux modes de fonctionnement un mode trace o il visualise l ex cution un mode interac
432. t une entit Prolog repr sentation interne une s quence de caract res repr sentation externe ou r ciproquement Contexte de lecture et d criture R gles de passage d un identificateur abr g un identificateur complet et vice versa lors d une op ration de lecture criture Repr sentation abr g e d un identificateur C est une repr sentation externe sans pr fixe d un identificateur La repr sentation compl te peut tre d termin e de mani re non ambigu partir des conventions de lecture criture ou contexte de lecture criture Deux repr sentations abr g es identiques peuvent repr senter des entit s diff rentes lorsqu elles sont prises dans des contextes diff rents mais repr sentent toujours la m me entit lorsqu elles sont prises dans le m me contexte de lecture criture ProloglA Prolog R3 6 Manuel de R f rence HERITAGE Module p Dans un programme c est tout moment l ensemble des r gles et des faits dont l identificateur d acc s a le pr fixe p les tableaux Prolog sont ici assimil s a des faits Il s agit donc d une notion dynamique les modules voluent avec l tat du programme On peut voir la notion de module ainsi d finie comme un regroupement des r gles par famille des identificateurs d acc s 3 3 Syntaxe des identificateurs La syntaxe des identificateurs est tendue de mani re pouvoir les regrouper par leur pr fixe La syntaxe d un identificateu
433. t unifient le r sultat avec 2 L expression valuer est construite r cursivement partir des constantes des identificateurs des l ments de tableau et des fonctions valuables Les optimisations si elles n ont pas t d sactiv es au lancement de Prolog du code g n r pour l appel au pr dicat val ne permettent pas pour la d compilation ou la mise au point de restituer le terme d origine mais un terme quivalent De plus elles suspendent momentan ment le m canisme de gestion automatique des espaces et des piles Le pr dicat fval lui n est pas optimis On pourra le pr f rer val dans les cas de programmes consommateurs d espace o val manipule fr quemment des termes complexes On vitera ainsi d avoir faire une gestion manuelle de la m moire Exemples gt val add mul 2 add 3 4 1000 x x 1014 gt val add mul 2e0 add 3 4e0 1000 x x 1 014000e 03 gt val 2 3 4 1000 x x 1014 Les fonctions arithm tiques peuvent avoir des arguments de types diff rents dans ce cas il y a une conversion automatique des types en type le plus g n ral les types sont par ordre d croissant r el entier Quand une fonction a valuer a un nombre incorrect d arguments ou quand certains de ses arguments sont du mauvais type val produit une erreur Cette erreur est r cup rable par la r gle pr d finie block e La valeur d un nombre ou d une cha ne est gale ce nombre ou cette
434. t_tlv V L geto X getenv PrologEdit X halt 1 hidden my rule 0 hidden private hidden debug my rule 0 hidden debug private hidden rule my rule 0 hidden rule private ident toto val if inf 1 5 add 1 1 3 2 in X C in X D C in char X in char X in double X in ident X in integer X in real xX in sentence X Y in string X in word X Y include myfile index database 1 val inf to zou 1 val infe to zou 1 val infinite flag X init_fassert town 2 1 2 1 2 inl X ProloglA B 6 Annexe B inl v1 v2 input u input u n input_is u insert insert s insertz insertz s integer t is t1 t2 is_array i v keysort l 21 keysort l 1 i kill_array i kill_module s L line line_width n list list i n list i n n list s list_of v 11 t 212 list_string l s list_tuple l t listing listing s lkload s1 s2 In m log m load s load s 1 MN member t 1 memory _file s memory _file s n mod ni n2 month i 2s ms_err i s mul m1 m2 name f 1 name f 1 new_tlv v 1 i next_char c next_char c nil Prolog LIT R ITAG inl X Y input console input myfile 1000 input_is console insert mutant p2 insert mutant p2 integer 3 X is 1 2 is array tab X
435. tableaux dans les deux langages La d finition de ces donn es communes se fait par la d claration d un descripteur dont le champ type aura une des valeurs suivantes INT ARRAY SINGLE FLOAT ARRAY DOUBLE _ ARRAY CHAR ARRAY STRING _ARRAY SYMBOL ARRAY ou bien une de ces valeurs augment e de OFFSET ZERO BASED Le champ name sera alors la repr sentation Prolog du tableau La primitive def_array ne doit pas tre utilis e pour d finir ce tableau Le champ size indique le nombre d l ments du tableau Le champ adresse est l adresse de la zone m moire r serv e en C pour ce tableau Ce sera en fonction du type de l objet INT _ARRAY l adresse d une zone statique d entiers type int du C CHAR ARRAY l adresse d une zone de caract res 1 octet par caract re STRING _ARRAY l adresse d un tableau de pointeurs vers des cha nes termin es par le caract re nul Il peut tre d clar sous la forme char tab size ZAttention au mode de codage des carat res Voir annexe E 3 Attention au mode de codage des cha nes Voir annexe E ProloglA Prolog INT RITA LI LITE Extensions avec des langages externes R 7 21 Attention il n y a pas de test de d bordement sur la taille des cha nes manipul es par l interface Ne pas oublier d allouer effectivement l espace pour les cha nes et d initialiser le tableau de pointeurs SINGLE FLOAT ARRAY l adresse d une zone de r els 32 bits IEEE DOUBLE ARRAY
436. te 1 e qualifi e de l identificateur de r gle doit tre sp cifi e Nous verrons dans les sections suivantes d autres d clarations permettant de simplifier encore les notations La r gle de qualification est la m me pour les noms des r gles et pour les noms des foncteurs Exemple en syntaxe Edinburgh module test programme d fini myprint X test myprint X data 1 test data 1l data john test data john do printl L test do printl L C myprint L C test myprint L call C sys call C do _print2 L test do_print2 L C write L C sys write L call cC sys call C do list data test do list data listing data 1 sys listing test data 1 end module test 3 1 4 Quelques r gles simples d utilisation Une mani re tr s simple d utiliser les modules consiste noter syst matiquement avec des noms g n riques les donn es que l on veut noter dans plusieurs modules et de pr fixer syst matiquement tous les noms d appels de r gles dans d autres modules que le module courant et le module syst me Exemple gt insert module lexicon ProloglA Prolog R3 4 Manuel de R f rence HERITAGE np john gt np marie gt end_module lexicon module grammar nom_propre X gt lexicon np X end_module grammar gt grammar nom propre X X john Lorsque l on a un doute sur la qualification qui a
437. te d une telle unit est une cha ne de caract resl 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 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 sorte de pile l unit qui est au sommet s appelle l unit courante En principe toutes les op rations d entr e sortie s effectuent sur l unit courante correspondante 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 Changer d unit 1 e effacer input f ou output f ne ferme pas physiquement l unit courante ni ne change son tat mais ouvre si n cessaire une nouvelle unit et la met au sommet de la pile de fa on pouvoir restaurer l unit pr c dente la fermeture de cette nouvelle unit Le nombre d unit s pouvant tre ouvertes simultan ment est d pendant de la machine h te 5 0 G n ralit s Les unit s d entr e sortie cr es ont un type bien d fini ainsi qu un mode d ouverture Le
438. te en un volume comportant les fichiers suivants 1 2 1 Fichiers indispensables pour utiliser Prolog err txt Fichier contenant les messages d erreurs en anglais et consult par Prolog lors de l appel de la r gle ms_err si l option r n a pas t utilis e pour en choisir un autre Pour avoir les messages en fran ais il faut choisir le fichier fr_err txt fonts usr Fichier de d finition des fontes utilis es dans l environnement graphique par ProloglII L utilisateur peut intervenir sur ce fichier avant le d marrage pour d finir les fontes f 1 fi 2 utilis es par exemple par le pr dicat gr font initial po Fichier contenant le code sauv du superviseur ProloglA J Prolog UCIS LITE Guide d installation sous l environnement Windows U1 3 J Prolog LIE PIT AZT AEN AGE prolog exe Fichier ex cutable de la version de d veloppement de Prolog II 1 2 2 Fichiers annexes pour l utilisation de Prolog customiz dl _ DLL contenant des ressources de personnalisation de Prolog H Automatiquement reconnue si renomm e en customiz dll dde mo Module objet Prolog charger pour l criture d un applicatif client ou serveur utilisant le protocole DDE dessin m2 dessin mo Fichiers source et objet du module de dessin d arbres edinburg mo Module objet charg automatiquement lorsque l on active la syntaxe Edinburgh Contient toutes les r gles pr d finies sp cifiques la syntaxe Edinbur
439. te le ou les paquet de r gles indiqu s par t t peut tre une s quence de un ou plusieurs termes de la forme suivante i d signe un identificateur a un entier et v une variable ia Toutes les r gles composant la paquet de nom i et d arit nombre d arguments a i Toutes les r gles dont l acc s est i quelque soit leur arit v a Toutes les r gles dont l arit est a i quivalent de iW ProloglA Z Treteg TA ET LITE 7 Prolog PITATE TT Structuration et modification des r gles R 3 29 exemple gt list num bin 2 list s Lister un module s doit tre une cha ne de caract res toutes les r gles ayant le pr fixe s sont list es sur la sortie courante list i a 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 multifile i a Permettre la non continuit d un paquet de r gles Directive de compilation identique la directive discontiguous 1 not_defined s 1 Trouver les acc s non d finis d un module Unifie avec la liste des acc s appartenant au module s qui ne sont pas d finis Les acc s sont not s i a o i est l identificateur d acc s et a son arit Remarque cette r gle pr d finie active le r cup rateur de m moire sur le dictionnaire avant de fournir le r sultat Exemple gt insert module agence voyage
440. teMles ss treatm tetas ra sa al R6 5 6 6 Outil de mise au point de programmes R6 5 0 64 Moderate Sun ns teense ci hace tae hae R6 6 6 6 2 Mode interactifs nent R6 7 6 6 2 Points d Anne R6 7 6 6 2 2 Progression dans le code R6 8 ProloglA vi Manuel de R f rence 6 6 2 3 Terminer l ex cution 2 20 3 ssghercts acacia R6 9 6 6 2 4 Affichage des informations R6 9 6 6 2 5 Informations annexes sur l ex cution R6 14 6 6 2 6 Ong Urati Onis este Mrs R6 16 6 6 3 Activation d un mode de mise au point R6 17 6 6 4 Gestion des points d arr t R6 18 6 6 5 Commandes du mode interactif R6 18 6 6 6 EXEMPIS rte MR HS ces ne de R 6 20 6 7 Modification et visualisation de l tat courant R 6 23 6 8 Gestion automatique des espaces et des piles R 6 25 7 Extensions de Prolog avec des langages externes sscccsesseeees R7 1 7 1 Principes des fonctions de communication de donn es R7 2 7 2 Fonctions de communication de donn es simples R7 3 7 2 1 Test du type d un argument R7 3 7 2 2 Transfert de donn es simples de Prolog vers un 006 aute langage ANA tres no A aaed e i R7 4 7 2 3 Transfert de donn es simples d un langage externe VES Prolog RSS Macatee ott ne R7 6 7 3 Fonctions de communication de termes quelconques R7 8 7 3 1 Au moyen de cha nes de caract res R7 8 7 3 2 Au moyen de stru
441. tem nil i b nil gt block exit 816 set item absent i set item 1 Jelp 4 Dp 4 b 4 1 set itemi e l i b e l gt set_item 1 i b 1 gt gr dialog group zonel 0 group zone2 1 nil L Hello crow rb1 color red 0 Red crow rb1 color green 1 Green editf 5 ed1 aa button2 Disable disable button2 Enable enable buttonD ProloglA U5 48 Manuel d Utilisation Windows Bisa lies i Hed i greon Hello O Red Green a 7 L color green ed1 aa nil 5 10 Envoi d v nements Prolog depuis un objet externe Nous appellerons objet externe tout objet graphique cr d une autre mani re que par l appel des pr dicats graphiques Cela peut tre fait durant l appel un pr dicat externe ou bien dans le programme principal avant de d marrer Prolog par exemple en chargeant un objet d crit dans un fichier de ressources g n r par un outil externe par exemple Dialog Editor sous Windows La possibilit qui est offerte ici est de faire communiquer cet objet avec Prolog en utilisant le principe des v nements par l interm diaire de l appel une fonction C send_external_event no str bool int1 int2 envoie un v nement a Prolog Les deux modes de gestion de l v nement sont possibles traiter l v nement imm diatement ou bien le mettre dans la queue d v nements La
442. tent non lus sur la ligne courante d entr e ProloglA E J Prolog TA NAT LITE J Prolog UERITMGE EI LAGE Les entr es sorties R5 9 5 2 Sorties A travers les primitives ouf outm et line Prolog tient jour un pointeur de ligne pour chaque unit de sortie C est l effacement de la primitive ine qui le r initialise Ce pointeur permet de maintenir en interne une repr sentation de ce qui se passe sur la ligne courante de l unit Il sert en particulier d terminer la place qui reste sur la ligne la longueur de ligne est d finie par set line width et par cons quent sert g n rer un passage la ligne forc L utilisation de set _cursor n agit pas sur ce pointeur de ligne par cons quent la repr sentation de la ligne que se fait Prolog n est plus exacte Il peut arriver que des passages la ligne forc s lt return gt soient malvenus Il est donc conseill pour viter cela d utiliser conjointement set_cursor les primitives outl et outml plut t que les primitives out et outm Ainsi le pointeur de ligne est constamment r initialis et la gestion de la pr sentation est totalement laiss e set_cursor On notera que le comportement est le m me en faisant appel des r gles externes C Pascal qui g rent la pr sentation de l cran 5 2 1 R gles pour la sortie beep G n re une tonalit d avertissement flush Vide le tampon de caract res de l unit courante de sort
443. ter lors de l utilisation de r gles pr d finies auxquelles on passe une telle valeur en argument Il est conseill dans ce cas d utiliser le nom complet sys nil ou la notation quivalente Note 2 Lorsqu une r gle contient une d claration de contexte celui ci devient effectif au moment o la r gle est ex cut e et non au moment ou la r gle est lue Dans l exemple suivant le contexte n est pas modifi et l identificateur abr g peche est identifi peche puisque c est le contexte user qui est le contexte de lecture au moment de la lecture de la r gle Prolog II gt insert pomme gt set_context new other peche def peche peche gt current_context t0 current_context t0 t t2 3 Unifie 0 avec le terme identifiant le contexte courant de lecture criture et 11 2 13 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 close_context_dictionary s Ferme la famille d identificateurs s pour les op rations de contexte dans son tat au moment ou la commande est ex cut e C est a dire que tout nouvel identificateur de cette famille ne sera pas pris en compte dans les op rations de contexte add_implicit s s2 Rajoute au sous ensemble clos de la famille ferm e pour le contexte s1 l identificateur de nom abr g s2 Si s n est pas le pr fixe d une famille ferm e pour
444. term vars one 2 X Y Y L throw 12 trace debug dat val trunc 3 8e0 3 val truncate 3 8e0 3 tuple ff a tval 1 2 3 pile i X unify tlv V 22 unify with occurs check X 1 val 3 3 var X var_time X Y version X week 0 sunday write Hello world write alias1 Hello world write canonical Hello world write canonical aliasi Hello world write term foo quoted true write term alias1 f quoted false writeg foo 1 2 3 writeq alias1 foo 1 2 3 ProloglA Poole LI FE 7 ich ITAL Autres n tn m m2 ml m2 11 12 11 12 m ml m2 t gt 12 t gt 12 mi m2 mi m2 n n2 al lt a2 n lt lt n2 911 212 t 912 t 12 al lt a2 tl 12 t 12 t 12 t1 r2 al gt a2 al gt a2 nl gt gt n2 n V n2 t1 12 tal lt a2 tal gt a2 tal gt a2 al lt a2 T Liste des directives et pr dicats pr d finies B 11 val 4 X val 4 X val 3 14e0 0 5e X val 1 2 X write ca va nl integer X real X 2 val 1 2 X phrase gt gn gv string X gt see X val 3 4 X Y is 3 ff 4 val 4 8 X val 1 lt 2 X val 1 lt lt 4 X 1 X toto 1 2 X Y toto X val 1 Meet 1 X func X func Y tab I I 1 2 2 3 1 2 val 2 gt 1 X val
445. texte courant d ex cution d termine les abr viations possibles pour les identificateurs outl t quivaut la suite de buts out t line lorsque le terme a t crit on produit le passage la ligne suivante Exemple gt out 1 Pierre Salut nil 1 Pierre Salut nil gt N B Les accolades imprim es la suite du terme indiquent la r ussite de l effacement du but out 1 Pierre Salut nil Une mani re d en emp cher l impression consiste faire chouer artificiellement cet effacement gt out 1 Pierre Salut nil line fail 1 Pierre Salut nil gt outm s outml s Ecrit la chaine s sur l unit active de sortie sans crire les quotes et en interpr tant correctement les caract res de formatage que s peut contenir par exemple n Si la chaine est plus longue que la place restante sur la ligne en cours alors elle est coup e par un retour chariot masqu Les caract res correspondant un code ISO 8859 1 non imprimable sont envoy s sur l unit courante de sortie sans transformation Exemple gt out tBonjour line fail tBonjour gt outm tBonjour line fail Bonjour gt outml s quivaut a outm s line outm s n Ecrit n fois la cha ne s avec les m mes conventions que ci dessus Exemple outm 40 line fail out_equ t Ecrit le syst me minimal d quations du terme Cette r gle est beaucoup plus lente que out mais factorise les so
446. tial l tat initial standard fichier initial po est charg Ajouter de nouvelles r gles crites dans un autre langage par la m thode des parasites d crite ici consiste 1 D finir en Prolog l appel ces r gles par Prolog et l inclure dans un tat initial cette tape se fait automatiquement dans la m thode des descripteurs ProloglA A Prolog D 2 Annexe D HERITAGE 2 D finir l implantation externe en C ou Fortran ou tout autre langage externe compatible et l inclure dans la Machine prolog Cette m thode n cessite deux relais d appels l un entre le programme Prolog et le module utilisateur prouser l autre entre ce module et la fonction externe prolog my rule gt 300 switch nb case 300 prouser c my rule break autre module C Prenons un exemple Pour ajouter une nouvelle r gle il faut d abord choisir le module dans lequel on d sire la d finir On peut utiliser un module r serv cet usage par exemple Interface Nous nous placerons dans ce cas pour l exemple ci dessous Les deux tapes de la m thode sont 1 D finir la r gle d appel dans le module Interface module Interface my rule x y z gt 300 end module Interface Ceci peut se faire dans un module source s par ou directement sur la ligne de commande de Prolog Vous pouvez sauver ce module par la commande save Interface Interface mo Il peut alors tre
447. tier pour le num ro de l item concern dans la listbox Le premier item de listbox est repr sent par l entier 1 text i concerne le texte d un item de listbox i est un entier pour le num ro de l item concern dans la listbox Le premier item de listbox est repr sent par l entier 1 v peut avoir diff rentes valeurs selon les situations suivantes Interrogation sur le texte de l item v est une cha ne de caract res Si l item n existe pas v est la cha ne vide Modification du texte de l item i est un num ro d item existant v est une cha ne de caract res non vide Suppression de l item 7 est un num ro d item existant v est la cha ne vide Cr ation de l item est un num ro d item qui n existe pas v est une cha ne de caract res ventuellement vide Insertion de l item v est de la forme lt p 1 gt o p est une cha ne de caract res ventuellement vide pour d signer le texte de l item cr la position indiqu e par i toplist v est le num ro du premier item visible dans la listbox Les attributs sp cifiques aux scrollbar sont les suivants scrollb page concerne l amplitude du d placement du curseur lorsqu un saut est demand clic entre une fl che et le curseur v est un entier scrollb_ pos v d signe la position du curseur dans la scrollbar v est une des valeurs enti res de l intervalle de valeurs de la scrollbar Le 0 est en haut pour les bar
448. tif o il permet de prendre le contr le au cours de l ex cution et d effectuer des actions Dans un premier temps si l on ne veut pas se plonger dans le d tail des commandes du mode interactif le mode trace permet d afficher toutes les informations n cessaires la compr hension du programme Le mode trace est donc une approche simple et imm diate pour se rendre compte de l ex cution d un programme Chaque but effac est affich avec ses arguments unifi s sur la r gle choisie pour l effacement courant Les backtracking sont annonc s en pr cisant le pr dicat pour lequel il restait des choix et le rang dans le paquet de la nouvelle r gle Si le programme d exemple menu p2 est charg et si le mode trace est actif la s quence suivante montre la pr sentation de ces informations gt repas e Chapon_farci d hors d oeuvre Artichauts Melanie plat Chapon farci RECALL 2 plat 1 plat Chapon farci poisson Chapon_farci dessert Sorbet aux poires e Artichauts Melanie d Sorbet aux poires RECALL 2 dessert 1 dessert Fraises chantilly e Artichauts Melanie d Fraises chantilly RECALL 3 dessert 1 dessert Melon_en_surprise e Artichauts Melanie d Melon_en surprise Pour faciliter la lisibilit pour des programmes qui font eux m mes des critures sur la sortie courante les informations fournies par la trace peuvent tre redirig es sur un fichier Activation d sactivation
449. tine principale de Prolog en tant qu application Cette routine est largement comment e et effectue des appels aux fonctions ProloglA U3 4 Manuel d Utilisation Windows InitializeProlog hInstance hPrevInstance IpCmdLine nCmdShow qui va faire les initialisations n cessaires au lancement de Prolog Cette fonction retourne 0 si l initialisation a r ussi un num ro d erreur sinon Ses param tres sont ceux de la fonction WinMain Elle remplace la fonction ProStart mentionn e au chapitre 8 du manuel de r f rence StartPrologMainGoal qui va lancer le but principal de Prolog par appel a la fonction promain du fichier princip c dont le source est galement fourni Cette fonction retourne 0 si l appel a r ussi un num ro d erreur sinon L appel la fonction StartPrologMainGoal n est pas obligatoire pour utiliser la machine Prolog il peut tre remplac par l appel d une proc dure utilisateur qui installe son propre but et ainsi utilise Prolog en tant que runtime Cependant si cette proc dure constitue une tache longue notion intuitive elle doit tre lanc e de la mani re d crite dans le fichier afin de ne pas paralyser la machine TerminateProlog qui accomplira les t ches n cessaires la terminaison de Prolog Elle remplace la fonction ProFinal mentionn e au chapitre 8 du manuel de r f rence Dans ce fichier est galement fournie la fonction dont se sert Prolog pour distribuer chaque message
450. tion retourne la valeur correspondant err 7 2 2 Transfert de donn es simples de Prolog vers un autre langage Ces fonctions sont appel es par le programme externe pour obtenir les valeurs effectives des arguments du pr dicat Prolog Si le type de l argument effectif n est pas celui attendu ou bien s il n existe pas d argument du rang demand la fonction de communication notifie une erreur en affectant l indicateur err une valeur non nulle Si pour un argument de type entier la valeur ne peut tre repr sent e dans le type externe associ une erreur est notifi e de la m me mani re Attention Pour un comportement correct du syst me de gestion des erreurs on doit imm diatement sortir du programme externe si la variable repr sent e par err est non nulle ProloglA J Prolog TA NAT LITE SF OHT E GE Extensions avec des langages externes R7 5 Dolas oo Voici les fonctions disponibles pour les types simples Interface C int get_integer no_arg value err int no_arg long value int err int get_real no_arg value err int no_arg float value int err int get_double no_arg value err int no_arg double value int err int get_string no_arg value err int no_arg char value int err int get_max_string no_arg lg max value in external code err int no_arg int lg max char value int in_external_code int err Interface Fortran integer 4
451. tions Prolog pour la communication des donn es Il s agit ici de pouvoir exprimer en Prolog toutes les informations n cessaires pour pouvoir faire l appel d une fonction C concernant ses arguments et sa valeur de retour On s int ressera donc au mode de passage des arguments au type des arguments et de la valeur de retour de la fonction ala valeur initiale des arguments la valeur r sultat des arguments et de la fonction d autres informations techniques li es au type de l objet Plus qu au mode de passage d une donn e on s int ressera au r le de la donn e savoir donn e d entr e et ou de sortie En effet en Prolog une donn e se voyant affecter une valeur ne pourra plus en changer sauf par backtracking mais c est assimilable en comparant avec C une autre ex cution Une proc dure Prolog qui attendrait une valeur en entr e et un r sultat en sortie devrait utiliser deux donn es C est l la diff rence essentielle entre Prolog et C il est donc important de conna tre si une donn e initialis e ou pas doit changer de valeur au cours de l ex cution de la fonction C Dans la suite de ce chapitre on fera donc la distinction entre argument avec valeur de retour et argument sans valeur de retour Le mode de passage par adresse ou par valeur en sera d duit automatiquement Il est possible de passer en param tre 1 unentier long avec ou sans valeur de retour 2 un r el double pr cision a
452. tions de syntaxe s lectionn es les r gles dont le membre gauche est annot par P ne sont actives que lorsque la syntaxe Prolog II est activ e par exemple separator Les r gles dont le membre gauche est annot par E ne sont actives que lorsque la syntaxe Edinburgh est activ e par exemple graphic charf ProloglA R1 2 1 2 Manuel de R f rence e D autres r gles annot es par une lettre d pendent des options choisies au lancement de Prolog et ne sont valides que dans certains cas La totalit de la syntaxe de Prolog est donn e la fin de ce chapitre Des extraits plus ou moins simplifi s de cette syntaxe sont comment s dans les paragraphes suivants Jeu de caract res L utilisateur peut choisir parmi deux jeux de caract res celui d fini par le code ISO 8859 1 cf Annexe ou celui disponible sur la machine h te cf Manuel Utilisateur Dans ce manuel nous d crirons uniquement le jeu ISO Le choix du jeu h te aura pour effet de diminuer ou de grossir les sous ensembles Zetter et graphic_char avec des caract res n existant pas dans le jeu ISO cf U3 2 Voici une description simplifi e la description compl te se trouve au paragraphe 1 9 du jeu de caract res n cessaires Prolog letter TAT er EZH a lace WAM ee RB z x a A letter accent_escape digit o j 9 alpha letter digit _ separator nes yr Ai J su ba oe ek wn 2
453. tmouse x y gr_getmouse x y b Donne la position actuelle de la souris dans l unit graphique courante en coordonn es enti res relatives l origine de l unit b 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 gr_getmouser x y Identique gr getmouse x y mais donne un r sultat r el 5 8 Primitives sp ciales de saisie 5 8 1 Simulation de boutons ao L utilisation des deux primitives qui suivent n cessite le chargement pr alable du module de dessin dessin mo Elles permettent de simuler des boutons dans l unit graphique courante gr_draw_buttons b Dessine tous les boutons de la base de donn es dont l identificateur d acc s est b La base de donn es de boutons est construite par l utilisateur Il attribuera un nom de r gle a chaque groupement de boutons Les r gles doivent avoir trois arguments le rectangle dans lequel le bouton s inscrit la chaine affich e dans le bouton un terme a associer au bouton Par exemple les boutons suivants d finis par l utilisateur wtButton lt 5 160 gt lt 50 175 gt Edit edit gt wtButton lt 5 180 gt lt 50 195 gt Set nil gt ProloglA Prolog HERITAGE Primitives graphiques U 5 35 sont dessin s en lan ant le but gt gr draw buttons wtButton gr_button_hit b lt x y g
454. tore menubar U 5 22 restore_sysmenus U 5 22 retract R 3 31 retract R 10 6 retractall R 10 6 rightU 5 15 right attach U 5 13 round R 4 5 rule R 3 25 30 rule nb R 3 31 fs 7 Prolog TRITATE SAVEU 5 9 save R 3 33 save U 2 8 save U 5 9 14 save_menubar U 5 22 save_state R 3 34 save window U 5 11 Scrollbar U 5 5 scrollbar U 5 17 scrollb page U5 19 scrollb pos U 5 19 scrollb range U5 19 scrollb step U 5 20 see R 10 17 seeing R 10 17 seen R 10 17 selected items U 5 19 send external event U 5 48 send prolog interrupt R 9 3 setarg R 4 12 setof R 2 9 set_alias R 1 29 set _attribute U 5 17 set context R 3 11 set cursor R 5 11 set draw mode R 5 12 set import dirR 6 5 set_ input R 10 17 set line cursor R 5 11 set line width R 5 13 set menu U 5 22 set options R 6 24 set output R 10 18 set permanent symbol R 6 26 set permanent symbol R 7 15 21 set prefix limit R 3 7 set_prolog flag R 10 20 J Prolog LIE PIT AZT AEN AGE set_stream position R 10 13 set tlvR 2 15 set window U5 11 sfgetfile U 5 39 40 sfputfile U 5 40 SHAPE U 5 8 shape U 5 8 show_spy R 6 8 17 18 sign R 4 5 sin R 4 6 singleton R 3 27 singletons R 10 17 SINGLE FLOAT ARRAY R 7 18 21 SOLUTION EXISTS R 8 2 sort R 4 16 split R 4 13 sprintf R 5 11 sprintf R 7 27 spy R 6 8 18 20 sqrt R 4 6 sscanf R 5
455. tres EDIT Dans la console ou les fen tres TTY les lignes sont divis es en deux groupes lignes d entr e et lignes de sortie n est alors le rang l int rieur d un de ces groupes Exemple gt clear input inl s Maitre corbeau sur un arbre perche s Maitre corbeau sur un arbre perche in t c in t D c Lecture d un terme Prolog Lit la plus grande suite x de caract res qui constituent un terme ou le d but d un terme Si x est l expression d un terme on essaie d unifier ce dernier avec t Si x n est pas un terme une erreur se produit Tous les caract res blancs qui suivent x sont lus c est unifi avec la premi re unit lexicale lue ne faisant pas partie de x D est unifi avec le dictionnaire des variables du terme c est dire une liste de doublets correspondant aux variables de t Chaque doublet contient la cha ne de caract res qui est le nom originel de la variable et la variable en question Exemple SITE Ge ceci est un terme t ceci est un terme c gt in t D o ProloglA Les entr es sorties R5 5 J Prolog LIE PIT AZT AEN AGE aa x bb y n1 x t aa v129 bb v163 v129 D lt x v129 gt lt y_n1 v163 gt nil c Note La lecture d une unit en avance est ici indispensable cause des op rateurs in_integer t Lit d abord tous les caract res blancs puis essaie de lire un entier sur l unit courante Si l objet lu n a pas la syntaxe d un entier a
456. tring_term s t string term X err 500 V60 string_term s t1 712 string term err 500 X ss X Y string _term s t1 712 string term X err 1 Y string _term s t1 t2 n string term err 500 X ss X Y 1000 ProloglA B 10 Annexe B string_term s t1 t2 n sub ml m2 sub_atom il n1 n2 n3 i2 substring s1 n1 n2 s2 sup al a2 supe al a2 suppress i n suppress i n n sys_command s TUVW tab n tan m tassign i t tassign i n t tell f telling f term_cmp t1 22 n term_cmpv tl t2 n term_vars tl1 1 throw t time n time n1 n2 n3 told trace trace s true trunc m truncate m tuple tval t1 t2 unify_tlv v t2 unify with occurs_check t1 t2 val tl1 t 2 var var_time v n version n week n s write t write h t write_canonical t write _canonical h t write_term t l write_term h t l writeq t writeq h t Prolog LIT R ITAG string term X err 1 Y 1000 val sub 2d1 1e0 Xx sub atom abracadabra 0 5 X Y substring abcdef 4 2 X val sup to zou 0 val sup zou zou 1 suppress foo 2 suppress foo 2 5 sys_command showusers tab 10 val tan 3 14e0 X tassign aa tt 3 1 X tab 5 str tassign tab 1 123 tell file telling file term cmp 1 foo X term_cmpv 1 foo X
457. ts de lecture quand une fin de fichier est rencontr e est conforme l option eof action choisie l ouverture de l unit sur laquelle se fait la lecture at_end of stream C at_end of stream R ussit si une lecture sur le canal C a d j signal une fin de fichier choue sinon Contrairement au pr dicat eof ce pr dicat n essaie pas d effectuer une nouvelle lecture sur le canal C mais se contente d examiner le status de la lecture pr c dente current_input C C est unifi avec le canal associ l unit d entr e courante Attention C ne sera pas un alias get C X get X X est unifi avec l entier gal au code interne code ISO ou code de la machine h te du premier caract re non blanc lu sur l unit d entr e associ e au canal C Si une fin de fichier est rencontr e et que l unit a t ouverte avec l option eof_action eof_ code X est unifi avec la valeur 1 get_byte C X get_byte B X est unifi avec le premier octet entier gt 0 lu sur l unit d entr e associ e au canal C Cette unit doit tre de type binary Si une fin de fichier est rencontr e et que l unit a t ouverte avec l option eof action eof code X est unifi avec la valeur 1 get_char C X get_char X X est unifi avec le premier caract re lu sur l unit d entr e associ e au canal C Si une fin de fichier est rencontr e et que l unit a t ouverte avec l option eof_action eof_ code X est unifi avec la v
458. ts dll c prolog prolo dll 5 Lancer une session Prolog win prolog PROLOG II PrologIA gt 6 Ins rer l appel de la r gle externe dans le module gt insert roots a b c x y gt 20001 gt 7 Essayer la nouvelle r gle gt roots 1 0e 8 0e 15 0e x y x 5 0e0 y 3 0e0 gt roots 2 0e 4 0e 8 0e x y gt 3 6 Utilisation de PrologiI sous forme de DLL Prolog H est galement disponible sous la forme d une DLL 32 bits fichier prolog dll d nu e de tout environnement graphisme entr es sorties Cette DLL peut tre utilis e par toute application Windows 32 bits laquelle pourra aussi fonctionner sous Windows 3 tendu de l API Win32s La DLL Prolog exporte les routines d crites ci apr s ainsi que les routines classiques d crites au chapitre traitant des extensions en C Prolog On retiendra seulement que toutes ces routines sont export es par la DLL selon le protocole cdecl L utilisation de la librairie d import fichier prodil lib et de la d finition des prototypes fichier exportsw h vitera tout probl me ce niveau ConnectDescriptors EXTERNAL DESCRIPTOR paD Cette routine permet de d clarer dans le code de l application le tableau de descripteurs paD crit comme on l aurait fait pour une extension C directe Ce tableau de descripteurs doit tre persistant durant toute la session Prolog qui l utilise par exemple qualifi de static s il est en position de variable loca
459. u soit deux des trois chaines connues Exemple gt conc_string ab cd s s abcd gt conc ne s2 abcd s1i a ee a rt 2 cd ie abc rs substring s1 i j S2 Extrait de la cha ne s une sous cha ne commen ant la position i de longueur j et essaie de l unifier avec s2 Exemple gt substring 1234567890 3 4 x x 3456 find pattern s1 s2 n Unifie n avec la position du d but de la cha ne s2 dans la cha ne s1 Si s2 n est pas trouv alors l effacement de find pattern choue Exemple gt find pattern 1234567890 3456 p p 3 gt find pattern 1234567890 abcd p gt Note Cette primitive est d finie dans le module externe prouser c la modification inconsid r e du source correspondant peut tre responsable de son malfonctionnement Dans le source livr la longueur des chaines est limit e a 256 caract res 4 5 Composition et d composition d objets arg2 n t 2 Unifie 2 avec la longueur ou l l ment de rang n d un n uplet d une liste ou d une cha ne 1 Si 1 est une cha ne alors si n 0 12 longueur 1 n 0 12 nleMe caract re de la cha ne tl PrologIA Op rations pr d finies sur les donn es R4 11 Prolog INT RITA LI LITE 2 Si est une liste alors si n 0 t2 nombre d l ments de la liste n 0 12 ni me l ment de la liste t 3 Sif est un n uplet alors si n 0 N nombre d ar
460. ue si MS DOS utilise le jeu de caract res OEM Windows utilise le jeu ANSI qui correspond pratiquement au jeu ISO Il est donc possible que des fichiers crits sous MS DOS et contenant des caract res accentu s affichent des rectangles noirs aux emplacements correspondants lorsqu ils apparaissent dans une fen tre Windows Il est conseill de cr er les fichiers de texte avec un diteur sous Windows ProloglA J U3 2 Manuel d Utilisation Windows se Pal big_letter AM lle Ze letter big letter a A os g ea yx an RTA nn A an YEE digit O arel 93 alpha letter digit _ separator Lee di HA ue ne a separator nt wen lt special char 04 mo UETAN n myn mn 5 2 mn special_charE ae graphic c graphic char graphic char graphic char ni Msn Wel tr graphic char EM nen amp Wek tt mitt LL Welt WM Wi ERN mn WAN wom NBSP x character letter digit separator graphic char special_char string char character May tt Mu Maggy tt format_escape format_escape p we n g ete wa newline octal_digit octal_digit octal_digit x X hex_digit hex_digit 3 3 Personnalisation d une Application Lors de l initialisation de l Application la DLL customiz dll est charg e si elle existe dans le r pertoire qui contient l ex c
461. ui doit tre tap par l utilisateur appara t en caract res machine crire pench s ProloglA Vill Manuel d Utilisation Windows ProloglA J Prolog LUE RY TAKES J LUTTE 1 0 1 1 1 2 1 3 1 4 1 Guide d installation sous l environnement Windows Pr ambule Mat riel et logiciel requis Contenu du kit d installation Proc dure d installation Modification de l environnement d ex cution Ce chapitre d crit la proc dure d installation du compilateur Prolog II en tant qu Application dans l environnement Windows Il est recommand de le lire en entier avant de commencer l installation 1 0 Pr ambule Prolog II pour Windows est maintenant une v ritable application 32 bits qui fonctionne aussi bien sur Windows NT Windows 3 1 tendu avec le kit Win32s et Windows 95 Pour les utilisateurs Windows 3 Prolog II offre toujours la possibilit d extensions en C 16 bits extensions d sormais isol es dans une DLL donc ne n cessitant que le SDK 16 bits classique 1 1 Mat riel et logiciel requis 1 1 1 Pour lancer Prolog Au minimum un ordinateur PC 386 quip avec 4 Mo de m moire et dot de Windows version 3 1 augment du kit Win32s sachant que le syst me standard standard actuel serait plut t Windows 95 ou Windows NT 1 1 2 Pour ajouter des extensions m thode standard en 32 bits Tous les moyens d extension de Prolog sont utilisables ici L outil de d veloppement recomman
462. ul gt lt primaire gt lt reste de produit gt 8 lt vide gt 9 lt op mul lt op add gt 10 m 11 lt nombre gt 12 0 13 1 21 9 22 lt vide gt Par exemple la d composition de l expression 2 3 6 est donn e dans la figure C 1 les noms des symboles non terminaux ont t abr g s Repr sentation de la grammaire en Prolog Examinons comment crire cet analyseur en Prolog Pour cela consid rons la cha ne d entr e comme un graphe le premier sommet du graphe est plac au d but de la phrase et on ajoute un sommet apr s chaque mot de la phrase Chacun des mots va alors tiqueter l arc qui joint les deux sommets qui l encadrent Avec notre exemple nous obtenons 2 3 6 gt gt gt gt gt a b Cc d e f lt expr gt lt somme gt ae __ N lt prod gt lt r d s gt lt prim gt lt r d p gt lt op a gt lt prod gt lt r d s gt lt nb gt lt op m gt lt prim gt lt r d p gt lt prim gt lt r d p gt lt nb gt lt vide gt lt nb gt lt vide gt lt vide gt 2 3 6 ProloglA J Prolog TRITATE V UIUC 7 Prolog LIE PIT AZT AEN AGE Quelques exemples de programmes Prolog II C 3 Figure C 1 Les r gles de la grammaire peuvent alors tre vues comme des instructions permettant de compl
463. ule valeur possible gt on affecte attach or affect X L gt dif L nil new_set X L nouvel ensemble possible Le 3 me argument est l intersection des 2 listes inters L gt inters x 1 11 x 12 gt member x 11 inters 1 11 12 inters x 1 11 12 gt inters 1l 11 12 Predicat utilisateur verify in V arlibc T unifie T att gt member T_unifie T att unify tlv V_arlibc T_unifie o End of insertion o gt quelques ex cutions be_in x 1 2 3 4 be_in x 1 3 7 be_in x 1 7 8 x 1 gt be_in x 4 5 6 be_in x 7 8 9 Echec gt be in x 1 2 3 4 5 be in y 1 6 7 8 eq x y x 1 y 1 gt be_in x 1 2 3 4 5 be_in y 1 2 6 7 8 eq x y are x Y 2 ProloglA R2 18 Manuel de R f rence ProloglA J Prolog INT RITA CIS LATE 3 1 3 2 3 3 3 4 3 5 3 6 3 7 3 8 3 1 3 Structuration des r gles et modification Introduction Terminologie Syntaxe des identificateurs Contexte de Lecture et Ecriture Modules R sum ou Approche simplifi e des identificateurs contextes et modules Ajout suppression et recherche de r gles Manipulation des modules compil s Les notions de module de famille d identificateurs et de contexte de lecture criture ont t introduites pour permettre e La modularit et l ind pendance des programmes en permettant de partitionner l ensemble des identificateurs manipul s e La
464. ulei V T A gt outm Rulel out T outm outl A rule2 V T A gt outm Rule2 out T outm outl A rule3 V T A gt outm Rule3 out T outm outl A 2 gt new_tlv V 1 2 nil rulel add tlv V 3 4 nil rule2 ProloglA 2 J Prolog WTA NATE LITE J Prolog LIE PIT AZT AEN AGE Le contr le de l effacement des buts R2 15 add_tiv V 5 6 nil rule3 eq V foo Rulel foo 1 2 nil Rule2 foo 3 4 nil Rule3 foo 5 6 nil V rule1 1 2 nil rule2 3 4 nil rule3 5 6 nil nil Une combinaison de ces deux pr dicats peut tre simplement obtenue par un appel au pr dicat set_tlv v I o doit tre une liste d l ments de la forme i t i ett ayant la m me signification que dans les pr dicats pr c dents Si la liste comporte N l ments l appel ce pr dicat est quivalent un premier appel new _tlv 3 suivi de N 1 appels add_tlv 3 Exemple gt set tlv X foo 1 aa 2 nil X foo 1 aa 2 nil 2 5 2 R cup ration La liste des termes attribu s une variable peut tre obtenue au moyen du pr dicat get_tlv v l Unifie avec la liste form e des termes attribu s la variable v chacun de ces termes tant encapsul par le pr dicat utilisateur appel lors d une tentative d unification de cette variable avec une autre variable attribu e ou un terme connu Cette liste est donc de la forme id t1 id2 t2 nil avec l association de chaque identificateur id
465. un bon chemin qui est un chemin qui ne passe pas deux fois par la m me tape Pour cela on calcule un chemin possible par la r gle chemin que l on valide au fur et mesure par la r gle bonne liste ce qui permet de rejeter automatiquement le chemin en cours de construction d s qu on tente de lui adjoindre une tape qui y figure d j Voici la liste des chemins sans boucle passant par Marseille Londres et Los Angeles suivie du programme bon chemin 1 1 Marseille nil 1 London nil 1 LosAngeles nil 1 Marseille London nil 1 Marseille London LosAngeles nil 1 Marseille LosAngeles nil 1l Marseille LosAngeles London nil London Marseille nil London Marseille LosAngeles nil London LosAngeles nil London LosAngeles Marseille nil osAngeles Marseille nil osAngeles Marseille London nil osAngeles London nil LosAngeles London Marseille nil tow tl 5i a HHPHHHHEH Et voici le programme chemins sans boucles bon_chemin l gt bonne liste l chemin l chemin x nil gt etape x chemin x x 1 gt route x x chemin x 1 route x x gt etape x etape x etape Marseille gt etape London gt etape LosAngeles gt ProloglA C 16 Annexe C liste sans repetition bonne liste l gt freeze l bonne liste 1l bonne liste nil gt bonne liste x l gt hors de x 1l bonne liste l hors de x 1l gt fre
466. un index pour cette base de fait de la mani re suivante tous les arguments non libres du but doivent tre atomiques de plus ils d signent une combinaison d arguments qui doit correspondre une combinaison d indexation d finie pour cette base de faits Dans le cas contraire une erreur est g n r e Exemple init fassert bb 3 1 2 3 1 2 nil fasserta bb 1 2 3 fasserta bb 1 2 x fasserta bb 1 2 1 2 fasserta bb 1 1 1 1 fretractall bb 1 x 3 ProloglA J Prolog WTA NATE LITE 7 Prolog LIE PIT AZT AEN AGE Structuration et modification des r gles R3 25 gt lt bb 1 v36 3 gt LA COMBINAISON CORRESPONDANT AUX ARGUMENTS LIES N EXISTE PAS gt fretractall bb 1 2 2 x gt lt bb 1 2 2 v59 gt UN ARGUMENT INDEXE N EST PAS ATOMIQUE gt fretractall bb 1 2 x gt list bb 3 bb i 1 121 47 hidden rule x Masquer une r gle ou un module pour la d compilation Rend non visible pour rule Si x est de la forme i a avec i identificateur et a entier concerne le paquet de r gles d acc s i et d arit a Si x est une cha ne concerne toutes les r gles du module de nom x Par non visible pour rule on entend non d compilable c est dire qui ne peut tre reconstruit sous forme de source Prolog Par cons quent toutes les primitives de d compilation ou d impression de ces r gles n auront aucun effet hidden debug x Masquer les acc s une r gle
467. unifie avec son type identificateur nombre etc donn par un nombre conventionnel et avec sa valeur Les unit s lexicales de Prolog H sont d crites par la grammaire donn e au paragraphe 1 9 Relativement aux notations utilis es dans cette grammaire le type utilis par read_unit est d fini comme suit valeur def cat gorie lexicale valeur de u 1 identifier l identificateur 2 separator la chaine correspondante 3 variable la chaine correspondante 4 constant la constante 5 graphic symbol la cha ne correspondante Exemple gt read unit til ul read unit t2 u2 read unit t3 u3 read_unit t4 u4 x12 pi t1l 3 ul 12 t2 5 u2 4 t3 1 u3 pi t4 2 u4 Hi stat gt read_unit t u 123 t 4 u 123 read_rule tl t2 Lit sur l unit d entr e courante une r gle Prolog et unifie avec la t te et 12 avec la liste des termes de la queue Exemple gt read_rule ti1 ql read_rule t2 q2 tt 1 x gt outl x fail tt 2 x gt l tl tt 1 v118 ql outl v118 fail nil t2 tt 1 v228 q2 nil separator est un s parateur syntaxique voir 1 2 de ce manuel PrologIA R5 8 Manuel de R f rence sscanf La fonction C sscanf est accessible depuis Prolog avec la primitive callC voir 7 7 de ce manuel gt callC sscanf 123 1 lt R y gt y 1 230000000000000e 02 gt eq f x 0 callC sscanf 12 12 f lt I x gt lt I y gt x 18 y 10 5
468. ur t2 alors 1 sinon 0 Cf inf if t t1 12 valeur if t t 2 si valeur f 0 alors valeur f1 sinon valeur 2 sign t valeur sign f si valeur 0 alors 0 si valeur f lt 0 alors 1 sinon 1 La valeur de doit tre de type entier ou r el ceiling t valeur ceiling t partie enti re valeur La valeur de doit tre de type entier ou r el Le r sultat est de type entier floor t valeur floor t partie enti re valeur A La valeur de doit tre de type entier ou r el Le r sultat est de type entier round t valeur round t partie enti re valeur t 0 5 La valeur de doit tre de type entier ou r el Le r sultat est de type entier trunc t valeur trunc t conversion en entier de la valeur de t La valeur de doit tre de type entier ou r el float t valeur float t conversion en r el de la valeur de La valeur de doit tre de type entier ou r el double t valeur double t conversion en r el de la valeur de t La valeur de doit tre de type entier ou r el abs t valeur abs t valeur absolue de la valeur de t La valeur de doit tre de type entier ou r el Les fonctions suivantes doivent tre appliqu es des arguments de type entier Elles donnent un r sultat de type entier ProloglA Pal Manuel de R f rence A tL 12 valeur f1 12 et bit bit entre et 72 V 1 12 valeur f1 12
469. ur Chariot tap 1 clic en dehors de la liste 2 TAB tap On peut lire le clic de fin de s lection par gr click 0 x y Remarque cette fonction peut galement tre r alis e avec les primitives de cr ation et manipulation des objets listbox gr_popupltem r L n1 gr_popupltem r L n1 n2 Cr e un champ valeurs propos es Le st 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 L 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 relach le champ s lectionn est dessin dans le rectangle la place du pr c dent et 72 est unifi avec son num ro n1 si aucun champ n est s lectionn Exemple rendre la fen tre graphique visible et taper dans la console l exemple suivant gt gr _popupltem lt 20 20 120 40 gt aa bb cc dd 3 4 2 ProloglA 5 Z Dro G LIE RITA YE LEP YAO Z J Prolog LE RYT AEE CIS LATE Primitives graphiques U5 39 gr_click 1 x y gr_popupItem lt 20 20 120 40 gt aa bb cc dd 3 4 2 Lorsque vous cliquez dans la fen tre en maintenant le bouton appuy aa bof p CC dd 3 4 5 8 5 Choix de fichier input x output x C est une facilit ajout e aux primitives input et output avec x va
470. urence un entier n gatif Cette constante permettra dans les pr dicats de d signer de mani re unique le canal d acc s l unit Une option d ouverture permet d associer l unit un identificateur appel alias qui sera dans les sources de programmes un moyen plus clair et plus global de d signer ce num ro de canal ProloglA fs A Prolog tr t E PRESS J Prolog TACE ld FE Extensions Edinburgh R 10 13 close C O close C Ferme l unit associ e au canal C L argument O s il existe doit tre une liste d options prises parmi force true une erreur sur la fermeture de l unit sera remont e force false une erreur sur la fermeture de l unit sera ignor e open S M C O open S M C Ouvre selon le mode M l unit ayant pour nom l atome S et renvoie le canal associ C L argument O s il existe doit tre une liste d options prises parmi alias A o A doit tre un identificateur et indiquera un alias par lequel l unit pourra tre nomm e dans les pr dicats eof_action qui indique l action accomplir sur une fin de fichier suivant la valeur de 4 error une erreur est g n r e c est le d faut eof code un code sp cial d pendant du pr dicat de lecture est rendu chaque tentative d acc s au fichier Voir les pr dicats de lecture reset le m me code que dans le cas de eof code est rendu et la lecture de la fin de fichier est annul e La valeur de la propri t
471. urrent_context X current _ context X Y Z D current _file X current file X T M current_input X current op 200 XEx Y current_output X current predicate to begin 0 current prolog flag unknown X date J M A S debug echodebug dat debug 3 debug 3 echodebug dat def array stack 100 default man X eq x ProloglA B 4 Annexe B delay n dictionary dictionary 1 dictionary s 1 dif t1 t2 div ml1 m2 dot 1 double m draw_equ t draw_mode s draw_tree t E echo edinburgh edit i n edit l edit s editm s enum v n enum v n1 n2 eof eol eq t1 12 eql al a2 equations t1 t2 1 exit exit s exp m FGH fail fail_if fasserta t fassertz t file_dictionary s 1 find pattern s1 s2 n findall V T L float m flush flush_output flush_output h free freeze v t freplace t n t freplace i a nl n2 t fretract t fretractall t Prolog LIT R ITAG delay 5000 dictionary sys X dif X toto val div 8 0e 3 X dot 1 X val double 1 1e0 draw _equ aa bb cc bb cc draw_tree aa bb cc bb cc dd edit hors_d_oeuvre 1 edit meat 1 fish 1 edit file dat editm my_ module enum X 10 enum X 10 20 eq X father john mary val eql 3 3 1 equations X T 1 exit myfile psv val exp
472. us arbres et donne donc entre accolades une repr sentation plus compacte quand c est possible ProloglA 2 J Prolog TA NAT LITE J Prolog LIE PIT AZT AEN AGE Les entr es sorties R5 11 line Va la ligne page Va la page Sur l unit console l cran est effac et le curseur positionn en haut gauche de l cran N a pas d effet dans l environnement graphique paper Provoque la copie de ce qui se passe la console dans un fichier journal prolog log par d faut no_paper Annule l effet de paper Le fichier journal est ferm uniquement en fin de session Un appel ult rieur paper viendra ajouter des informations la fin du fichier set_cursor nl n2 Le curseur est positionn en n2 sur l cran n1 tant la coordonn e de la colonne et n2 celle de la ligne 7 1 correspond au coin en haut gauche de l cran On doit avoir 1 lt nl lt largeur de la ligne et 1 lt n2 lt nombre de lignes de l cran N a pas d effet dans l environnement graphique set line cursor n Positionne le pointeur courant de caract res la position n sur la ligne courante Cela fournit une sorte de tabulation set line cursor ne revient pas en arri re partir de la position courante du pointeur La position du premier caract re est 1 sprintf La fonction C sprintf est accessible depuis Prolog avec la primitive callC voir 7 7 de ce manuel gt callC sprintf lt x 80 gt valeur
473. utable de Prolog Cette DLL ne contient pas de code ex cutable son r le est de servir de support pour les ressources utilisateur En effet l ex cutable de Prolog contient d j les ressources de Prolog Les ressources utilisateur seront donc compil es et li es ce module en utilisant un fichier makefile fourni Les ressources suivantes sont recherch es lors de l initialisation et si elles existent remplacent les ressources originales correspondantes 10 est une ressource de type Ic ne elle sera utilis e la place de l ic ne Colonne de Prolog pour repr senter la fen tre principale de l Application Elle peut galement tre utilis e pour repr senter l Application dans la fen tre du Gestionnaire d Applications il faut pour cela la rechercher dans le module customiz dil au lieu de prolog exe ProloglA Z J Prolog LE RYT AEE CIS LATE Sp cificit s de Prolog II Windows U3 3 1 dans une ressource STRINGTABLE est une ressource de type cha ne de caract res qui sera utilis e comme titre initial de la fen tre principale de Prolog la place de Prolog I Attention ne pas oublier que dans une ressource le caract re 0 final doit tre explicite 100 est une ressource de type Description de Bo te de Dialogue qui pourra tre crite la main ou en utilisant l Editeur de Dialogues du SDK Si elle est trouv e l item A propos de Prolog du menu Application dispara t et l item A pr
474. utilisant la primitive syst me ki pour envoyer des signaux la t che Prolog partir du Shell Pour mettre en oeuvre cet exemple suivre les tapes suivantes 1 Ecrire l extension Prolog pour r agir au signal SIGUSRI 30 et y associer la r gle message dans le fichier fest c include lt signal h gt include proext h define MYEVENT 8 extern long pro_signal extern void send prolog interrupt extern P SYMBOL pro symbol 1C est un signal asynchrone que l on peut g n rer hors Prolog depuis un autre processus UNIX UNIX est un syst me multit ches tous les programmes qui s ex cutent sont des processus ProloglA J Prolog R9 4 Manuel de R f rence HERITAGE static int my P Handler int err 0 new_goal put_strterm 1 message amp err if lerr err next _solution kill goal return err gt 0 err O static void my_C_signal_handler send _prolog_ interrupt MYEVENT Cet appel pourrait tre mis dans le programme principal pour faire l initialisation automatiquement Le tableau de descripteurs n est alors plus n cessaire static long install_handler pro signal MYEVENT my P Handler signal SIGUSR1 my_C_signal_handler return 0 EXTERNAL DESCRIPTOR testTable install handler C FUNCTION 0 POINTER install_handler 0 0 0 0 2 Compiler fest c et faire l dition de lien avec Prolog Ajouter dans Pr
475. vant effacer nil gt effacer t 1 gt rule t q effacer q effacer 1 rule t q est une r gle pr d finie voir le chapitre 3 qui donne par num ration toutes les r gles dont la t te s unifie avec f et la queue avec q Le moyen de contr le 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 La mani re correcte d crire ce programme consiste enlever la r cursivit gauche plus grand Jo Max gt plus grand Max Fred gt plus grand x y gt plus grand x z plus grandi z y ISi le syst me de r allocation automatique n est pas d sactiv au d marrage de Prolog un certain nombre de r allocations se produiront avant le d bordement ProloglA A R2 2 Manuel de R f rence 2 elig gt plus_grand Jo x x Max x Fred DEBORDEMENT Une bonne solution plus_grand Jo Max gt plus_grand Max Fred gt plus_grand x z gt plus grand x y
476. vars false ignore ops true ProloglA PRESS J Prolog TACE ld FE Extensions Edinburgh R 10 19 write_term C X O write _term X O Ecrit le terme X sur l unit de sortie associ e au canal C en tenant compte de la liste d options O options prises parmi quoted true ou quoted false indique si les constantes cha nes et les identificateurs contenus dans X doivent tre crits sous forme quot e ignore _ops true ou ignore _ops false indique si les d clarations courantes d op rateurs doivent tre ignor es numbervars true ou numbervars false indique si les termes de la forme VAR N N tant un entier positif doivent tre crits comme une variable constitu e d une lettre majuscule suivie d un entier La lettre est la i 1 i me lettre de l alphabet et l entier est j tels que i N modulo 26 j N 26 division enti re Si une option n est pas sp cifi e elle a pour valeur par d faut false Exemples write _term quoted atom string 1 2 SVAR 35 quoted atom string 1 2 S VAR 35 write _term quoted atom string 1 2 SVAR 35 quoted true numbervars true ignore_ops true quoted atom string 1 2 J1 10 6 L environnement Un certain nombre de param tres globaux appel s variables d tat peuvent tre modifi s ou consult s Ce sont l tat du d bogueur nom de la variable d tat debug valeurs possibles on actif ou
477. ve echo r alise l affichage la console au fur et mesure de la lecture du fichier la carte hors d oeuvre Artichauts M lanie gt hors d oeuvre Truffes sous le sel gt hors d oeuvre Cresson oeuf poche gt viande Grillade de boeuf gt viande Poulet au tilleul gt poisson Bar aux algues gt poisson Chapon farci gt dessert Sorbet aux poires gt dessert Fraises chantilly gt dessert Melon en surprise gt plat de r sistance plat p gt viande p plat p gt poisson p composition d un repas repas e p d gt hors d oeuvre e plat p dessert d valeur calorique pour une portion calories Artichauts M lanie 150 gt calories Cresson oeuf poche 202 gt calories Truffes sous le sel 212 gt calories Grillade de boeuf 532 gt calories Poulet au tilleul 400 gt calories Bar aux algues 292 gt calories Chapon farci 254 gt calories Sorbet aux poires 223 gt calories Fraises chantilly 289 gt calories Melon en surprise 122 gt valeur calorique d un repas valeur e p d v gt calories e x calories p y calories d z ajouter x y Z v repas quilibr repas equilibre e p d gt repas e p d valeur e p d v inferieur v 800 divers ajouter a b c d gt val add a add b c d inferieur x y gt val inf x y 1 gt ProloglA
478. vec ou sans valeur de retour 3 ume chaine de caract res avec ou sans valeur de retour 4 un tableau d entiers de cha nes de caract res ou de r els double pr cision avec ou sans valeur de retour Il est possible d attendre en r sultat de la fonction 1 un entier long 2 un r el double pr cision Voyons pr sent quelles sont les conventions Pour les illustrer sur des exemples on supposera qu un lien a t d clar entre le pr dicat relaiProlog et la fonction fonctionc 7 7 2 1 Convention pour des param tres sans valeur de retour Dans ce cas il n est pas utile de sp cifier le type de la donn e Prolog le conna t puisque la donn e a d j une valeur Les donn es de type entier r el ou cha ne sont repr sent es par la donn e Prolog elle m me ProloglA R 7 28 Manuel de r f rence Les donn es de type tableau homog ne d entiers de r els ou de cha nes sont repr sent es par une liste Prolog termin e ventuellement par nil d entiers de r els ou de cha nes Par exemple relaiProlog 180 3 14e0 pi 2 3 5 7 11 13 17 nil nb he a A ba nil est quivalent aux instructions C suivantes long argl 180L double arg2 3 14 char arg3 p i o long arg4 2 3 5 7 11 11 13 17 char arg5 Eas np a ba fonctionC argl arg2 arg3 arg4 arg5 Les chaines et les tableaux sont toujours pass s par adresse selon la convention habituelle en C
479. vent tre imprim s apr s unification c est dire l impression a lieu apr s le choix de la r gle et juste avant le prochain point d arr t Par cons quent on pourra avoir des r sultats diff rents d une ex cution l autre pour des progressions de pas diff rents Par exemple pour un but donn si le pas de progression sous le debugger est celui d un step la machine Prolog aura simplement unifi le but avec la t te de la r gle Alors qu apr s un pas tel que next la machine Prolog aura ex cut le corps de la r gle o des unifications se seront pass es et les arguments du but n auront pas forc ment les m mes valeurs que pr c demment ProloglA R6 12 Manuel de R f rence Voyons sur notre exemple la valeur des arguments apr s unification dans les deux cas de progression gt repas e p d CALL repas v156 v191 v226 DBG Pl valide l impression apr s unification DBG CALL hors d oeuvre v156 DBG hors d oeuvre Artichauts Melanie CALL plat v191 DBG plat v191 CALL viande v191 DBG viande Grillade de boeuf CALL dessert v226 DBG g go to spy e Artichauts Melanie p Grillade de boeuf d Sorbet aux poires gt repas e p d CALL repas v156 v191 v226 DBG Pl DBG CALL hors d oeuvre v156 DBG hors d oeuvre Artichauts Melanie CALL plat v191 DBG n next plat Grillade de boeuf CALL dessert v226 DBG g e Art
480. xternes R7 9 7 Prolog 72 ITA IF TT Elles sont beaucoup moins efficaces que la solution propos e avec les structures de tableaux qui sera d crite au paragraphe suivant Elles offrent moins de possibilit s d exploitation des arguments Elles comportent une restriction sur la manipulation des variables il n est pas possible de voir ou d imposer que plusieurs arguments du pr dicat li a la proc dure externe utilisent la m me variable libre En effet le dictionnaire des variables est local a la proc dure de communication c est a dire local un argument et non pas local la r gle Interface C get _strterm no arg lg max value in external code err int no_ arg int lg max char value int in_external_code int err put_strterm no_arg value in external code err int no _arg char value int in external code int err Interface Fortran integer 4 function fgetstrterm no_arg lg max lg value in external code err integer 4 no arg lg max lg in external code err character value integer 4 function fputstrterm no_arg lg value in_external_code err integer 4 no arg lg max in external code err character value no_arg est le rang de l argument choisi dans le pr dicat Prolog Le premier argument a le rang 1 le second a le rang 2 et ainsi de suite S il n existe pas d argument de ce rang une erreur est annonc e value est l adresse d une zone de caract res lg max est la tai
481. ype size adresse char name int type size void adresse Par exemple il est possible de cr er dynamiquement une zone de donn es partag es D s que la fonction PRO BIND a t appel e le tableau est connu de Prolog L exemple suivant alloue une zone de 1000 r els commune Prolog et C et accessible dans Prolog sous le nom mymodule data include lt malloc h gt include proext h double t t double malloc 1000 sizeof double PRO_BIND mymodule data DOUBLE ARRAY 1000 POINTER t ProloglA R 7 20 Manuel de r f rence LER Prolog a partir de l ex cution de cette s quence le programme Prolog suivant s ex cute sans erreur et r f rence la zone de donn es 4 assign mymodule data 5 1 5e Dans les paragraphes suivants qui exposent les diff rents types d objets accessibles par la m thode des descripteurs les exemples sont d crits avec des d clarations statiques Ils peuvent videmment aussi tre d clar s de mani re dynamique 7 5 Donn es partag es Les donn es qui peuvent tre partag es entre Prolog et C sont des donn es d un type manipulable par les deux langages Les donn es qui s y pr tent sont les entiers les r els les caract res les cha nes de caract res et les identificateurs Prolog peut tre tendu par une ou plusieurs zones de donn es partag es Ces zones de donn es sont assimil es des tableaux et sont manipul es comme des
482. ze2 1 gt lt 3 size3 gt gt der insert sizel u gt gr window u gr text 1 10 nil ProloglA U 5 24 Manuel d Utilisation Windows HERI J Prolog tr t E size2 u gt gr window u gr_text 1 12 nil Size Lorsque l on utilise set_menu pour la barre de menu c est dire avec u gal 0 le menu cr sur la barre est un pulldown menu La premi re cha ne du chemin c ou bien si c vaut nil la premi re cha ne de la valeur v repr sente le titre du pulldown menu L identification de ce menu est une cha ne la cha ne de titre la cr ation du menu Les modifications ult rieures du titre ne modifient pas l identification du menu L identification du menu peut tre utile pour d autres primitives telles que kill object get_attribute Exemple gt set_menu 0 new nil lt colors black grey white nil gt L identification du menu cr par cet appel est new son titre est colors gt set_menu 0 nil colors black grey white nil L identification du menu cr par cet appel est colors son titre est colors gt set_menu 0 colors black white else nil else L identification du menu cr par cet appel est colors son titre est colors Dans les primitives qui suivent le premier et le deuxi me argument suivent les m mes conventions que pour set_menu check_item u c v Cette primitive positionne ou enl ve le cochage de l item suivant les valeurs de v 0 indique non c

Download Pdf Manuals

image

Related Search

Related Contents

procedure Aid Progress Pharmacist Agreement (A.P.P.A.®)  取扱説明書  i.roc Ci70J-Ex 2Dカタログ    Brennenstuhl Remote Control Set RCS 1000 N Comfort  VERBLENDKUNSTSTOFFE  Instruction Manual 4-Quadrant Amplifier Type PAS 1000  Bruksanvisning Bruksanvisning Brugsanvisning  Pr o Minent  X Y tab.1 Nemo 96HD Nemo 96HD+ 10781608W  

Copyright © All rights reserved.
Failed to retrieve file