Séance 11 : Initiation à Prolog Flashcards
Qu’est-ce que la logique procédurale?
La résolution d’un problème avec une suite d’opérations qui permet d’obtenir la solution voulue
ex: Python texte -> procédure -> résultat
Comment est appliquée la logique procédurale? Exemples d’applications?
Par la manipulation et la transformation d’unités
ex: trier les mots d’un texte
extraire des contextes
gestion d’une base de donnée
V ou F : la procédure en logique procédurale dépend de la nature de l’objet à traiter.
Faux, elle en est indépendante. L’ordinateur n’a pas besoin de savoir ce qu’est un mot pour calculer sa fréquence dans un texte. Vs prolog qui a besoin de connaissances, comme nous.
Quelles sont les limites de la logique procédurale? Comment les traite-on en Prolog?
- Impossible de traiter des relations (représentation de connaissances)
ex: Jean est le père de Michel.
=> faits en Prolog
- Impossible de faire des inférences (nouvelles connaissances à partir de connaissances actuelles : exploitation de relations)
ex: Si une personne X et une personne Y – X et Y étant des personnes différentes - ont le même père ou la même mère alors X est le frère ou la sœur de Y et Y est le frère ou la sœur de X.
=> règles en Prolog
Quel langage de programmation utilise Prolog? Que permet-il de faire?
Le langage de programmation déclaratif.
Il fait appel aux mécanismes d’inférence de la logique des prédicats :
- Permet de représenter des relations et de faire des inférences (déduire nouvelles connaissances à partir d’actuelles sans qu’elles soit explicitées)
(D’où son nom «Programmation en logique».)
Prolog est-il efficace? puissant?
Très inefficace: les programmes sont lents.
Très puissant: développement rapide de mécanismes très complexes.
Quand on utilise Prolog? 2 exemples?
Pour des problèmes exprimés sous forme d’objets et de relations
= représentation de connaissances
ex: analyse syntaxique (on définit connaissances de base (catégories et syntagmes) et après on peut inférer quels agencements de mots font quels syntagmes
ex: création d’un arbre généalogique (on définit qui est le père, mère de qui et va inférer frère soeur etc)
Qu’est-ce qu’un terme dans Prolog?
Peut être une variable, un atome, un fait, une règle…
V ou F : Une variable est un terme.
Vrai, terme qui peut contenir un terme (car peut contenir un atome, un fait, une règle, un nombre, une structure)
Quels sont les 2 types de termes?
Inconditionnels (faits)
femme(marie).
homme(jean).
Conditionnels (règles)
parents(X,Y,Z) :-
mere(X,Z), pere(Y,Z).
V ou F ; L’ordre est important dans Prolog.
Faux, il est arbitraire. L’ordre des atomes doit toujours être le même par exemple (ex: parents(marie,jean,jude) => tj mère, père, enfant))
Différemment à Python, c’est comme si tout se fait en même temps.
V ou F : La signification d’un terme est pas important dans Prolog.
Faux, il est arbitraire (ex: patient peut référer à la patience ou la maladie), mais est important, car on doit toujours garder la même.
Qu’est-ce que l’humain fait quand il dit “Jean possède un livre”. Prolog fait-il la même chose?
- Il identifie deux objets (livre et jean)
- Il exprime une relation (appartenance)
=> donc, fait appel aux connaissances du lecteur ou de l’interlocuteur sur la nature des objets et sur les propriétés de la relation (unidirectionnelle (le livre possède pas jean) vs bidirectionnelle (pour frère ex))
Prolog fait la même chose, c’est sa grande force.
V ou F : Les objets doivent être nommés explicitement dans une relation. Ex?
Faux, ‘interlocuteur, l’utilisateur du programme comprend les informations implicites en fonction de ses connaissances et du contexte.
=> c’est l’esprit de Prolog, il fait appel aux connaissances de l’utilisateur
Exemple : La pomme est bonne
On ne dit pas pour qui (ou pour quoi) la pomme est bonne.
Il peut s’agir d’un être vivant mais pas nécessairement. La pomme (au sens du marché de la pomme) pourrait être bonne pour l’économie.
Le sens précis de «bonne» n’est pas explicite.
Quelles sont les propriétés des variables?
Elles commencent par une majuscule.
Leur portée est uniquement à l’intérieur d’un terme
ex:
est_mere(X) :- mere(X,Y).
est_pere(X) :- pere(X,Y).
*Tout est compartimenté, les X et Y ne sont pas les mêmes d’une ligne à l’autre