• Aucun résultat trouvé

Programmation logique

N/A
N/A
Protected

Academic year: 2022

Partager "Programmation logique"

Copied!
24
0
0

Texte intégral

(1)

Programmation logique

Damien Nouvel

(2)

Principes de programmation logique

Plan

1. Principes de programmation logique 2. Programmation logique avec SWI-Prolog 3. Mécanismes de Prolog

(3)

Principes de programmation logique

Historique de la programmation logique

§ Historiquement : calculateurs, programmation impérative

‚ Fonctionnement pas-à-pas

‚ Compilation mais pas d’inférences

§ Manipulation de connaissances

‚ Déclarations de variables et fonctions

‚ Interrogation par requêtes (non-déterministe)

‚ Règles d’inférences

ñ Moins à implémenter, mais plus contraignant

ñ Prolog : PROgrammation LOGique (Colmerauer, 1972)

Chaînage arrièreà partir de buts

Unificationpar substitutions

(4)

Principes de programmation logique

Historique de la programmation logique

§ Historiquement : calculateurs, programmation impérative

‚ Fonctionnement pas-à-pas

‚ Compilation mais pas d’inférences

§ Manipulation de connaissances

‚ Déclarations de variables et fonctions

‚ Interrogation par requêtes (non-déterministe)

‚ Règles d’inférences

ñ Moins à implémenter, mais plus contraignant

ñ Prolog : PROgrammation LOGique (Colmerauer, 1972)

Chaînage arrièreà partir de buts

Unificationpar substitutions

(5)

Principes de programmation logique

Historique de la programmation logique

§ Historiquement : calculateurs, programmation impérative

‚ Fonctionnement pas-à-pas

‚ Compilation mais pas d’inférences

§ Manipulation de connaissances

‚ Déclarations de variables et fonctions

‚ Interrogation par requêtes (non-déterministe)

‚ Règles d’inférences

ñ Moins à implémenter, mais plus contraignant

ñ Prolog : PROgrammation LOGique (Colmerauer, 1972)

Chaînage arrièreà partir de buts

Unificationpar substitutions

(6)

Principes de programmation logique

Fonctionnement général

Programme - faits - règles

Base de connaissances

Moteur d’inférences Requête

(7)

Principes de programmation logique

Syntaxe Prolog

§ Briques élémentaires

Constantesavec une minuscule : pierre, paul

Nombresentier ou flottant :42, 2.3

Chaînesentre guillemets : "abcdef"

Variablesavec une majuscule :X, Y

Prédicatsavec une minuscule : humain(X)

§ Assertions ou “instructions” (terminent par un point)

‚ Faits / base de connaissances, par exemple

Prédicat unaire :humain(pierre).

Prédicat binaire :parent(pierre, paul).

‚ Règles :fils(X, Y) :- parent(Y,X), homme(X).

‚ Requêtes : ?-enfant(paul, X).

Sans variables, réponse danstV,Fu(true, fail)

Avecnvariables, réponse danstFu YDn

‚ Différent de : X \= Y

(8)

Principes de programmation logique

Syntaxe Prolog

§ Briques élémentaires

Constantesavec une minuscule : pierre, paul

Nombresentier ou flottant :42, 2.3

Chaînesentre guillemets : "abcdef"

Variablesavec une majuscule :X, Y

Prédicatsavec une minuscule : humain(X)

§ Assertions ou “instructions” (terminent par un point)

‚ Faits / base de connaissances, par exemple

Prédicat unaire :humain(pierre).

Prédicat binaire :parent(pierre, paul).

‚ Règles :fils(X, Y) :- parent(Y,X), homme(X).

‚ Requêtes : ?-enfant(paul, X).

Sans variables, réponse danstV,Fu(true, fail)

Avecnvariables, réponse danstFu YDn

‚ Différent de : X \= Y

(9)

Principes de programmation logique

Syntaxe Prolog

§ Briques élémentaires

Constantesavec une minuscule : pierre, paul

Nombresentier ou flottant :42, 2.3

Chaînesentre guillemets : "abcdef"

Variablesavec une majuscule :X, Y

Prédicatsavec une minuscule : humain(X)

§ Assertions ou “instructions” (terminent par un point)

‚ Faits / base de connaissances, par exemple

Prédicat unaire :humain(pierre).

Prédicat binaire :parent(pierre, paul).

‚ Règles :fils(X, Y) :- parent(Y,X), homme(X).

‚ Requêtes : ?-enfant(paul, X).

Sans variables, réponse danstV,Fu(true, fail)

Avecnvariables, réponse danstFu YDn

‚ Différent de : X \= Y

(10)

Principes de programmation logique

Syntaxe Prolog

§ Briques élémentaires

Constantesavec une minuscule : pierre, paul

Nombresentier ou flottant :42, 2.3

Chaînesentre guillemets : "abcdef"

Variablesavec une majuscule :X, Y

Prédicatsavec une minuscule : humain(X)

§ Assertions ou “instructions” (terminent par un point)

‚ Faits / base de connaissances, par exemple

Prédicat unaire :humain(pierre).

Prédicat binaire :parent(pierre, paul).

‚ Règles :fils(X, Y) :- parent(Y,X), homme(X).

‚ Requêtes : ?-enfant(paul, X).

Sans variables, réponse danstV,Fu(true, fail)

Avecnvariables, réponse danstFu YDn

‚ Différent de : X \= Y

(11)

Principes de programmation logique

Syntaxe Prolog

§ Briques élémentaires

Constantesavec une minuscule : pierre, paul

Nombresentier ou flottant :42, 2.3

Chaînesentre guillemets : "abcdef"

Variablesavec une majuscule :X, Y

Prédicatsavec une minuscule : humain(X)

§ Assertions ou “instructions” (terminent par un point)

‚ Faits / base de connaissances, par exemple

Prédicat unaire :humain(pierre).

Prédicat binaire :parent(pierre, paul).

‚ Règles :fils(X, Y) :- parent(Y,X), homme(X).

‚ Requêtes : ?-enfant(paul, X).

Sans variables, réponse danstV,Fu(true, fail)

Avecnvariables, réponse danstFu YDn

‚ Différent de : X \= Y

(12)

Principes de programmation logique

Syntaxe Prolog

§ Briques élémentaires

Constantesavec une minuscule : pierre, paul

Nombresentier ou flottant :42, 2.3

Chaînesentre guillemets : "abcdef"

Variablesavec une majuscule :X, Y

Prédicatsavec une minuscule : humain(X)

§ Assertions ou “instructions” (terminent par un point)

‚ Faits / base de connaissances, par exemple

Prédicat unaire :humain(pierre).

Prédicat binaire :parent(pierre, paul).

‚ Règles :fils(X, Y) :- parent(Y,X), homme(X).

‚ Requêtes : ?-enfant(paul, X).

(13)

Programmation logique avec SWI-Prolog

Plan

1. Principes de programmation logique 2. Programmation logique avec SWI-Prolog 3. Mécanismes de Prolog

(14)

Programmation logique avec SWI-Prolog

Généralités

§ SWI-Prolog

‚ Jan Wielemaker (1987)

‚ Environnement en ligne de commande

‚ Demo en ligne : http://swish.swi-prolog.org/

(15)

Programmation logique avec SWI-Prolog

Généralités

§ SWI-Prolog

‚ Jan Wielemaker (1987)

‚ Environnement en ligne de commande

‚ Demo en ligne : http://swish.swi-prolog.org/

(16)

Programmation logique avec SWI-Prolog

Exercice

§ Famille

‚ Modélisez les faits suivant

Jean et Marie sont parents de Pierre, Paul et Sophie

Pierre a deux enfants : Eliott et Rosie

Sophie a trois enfants : Adrien, Irène et Marc

‚ Définissez des règles pour modéliser les relations

Grand-parent

Petit-enfant

‚ Ajoutez les faits sur le sexe de chaque personne et ajoutez

Frère, sœur

Oncle, tante

‚ Faites les requêtes qui retournent

(17)

Mécanismes de Prolog

Plan

1. Principes de programmation logique 2. Programmation logique avec SWI-Prolog 3. Mécanismes de Prolog

(18)

Mécanismes de Prolog

Unification

§ Comment trouver une réponse à une requête ?

ñ Unifier des clauses avec la requête

Substitutionsde variablesadéquates dans lesfaits

‚ Exemple

pere(jean, pierre).

?- pere(jean, X).

pere(Jean,X)[X/pierre]

ñ Faire des inférences

Substitutionsde variablesadéquates dans lesrègles

‚ Exemple

pere(pierre, eliott).

gdpere(X,Y) :- pere(X, Z), pere(Z, Y).

?- gdpere(jean, X).

pere(X,Z)^pere(Z,Y)[X/jean,Y/eliott,Z/pierre]

$gdpere(Jean,Eliott)

gdpere(Jean,X)[X/Eliott]

(19)

Mécanismes de Prolog

Unification

§ Comment trouver une réponse à une requête ? ñ Unifier des clauses avec la requête

Substitutionsde variablesadéquates dans lesfaits

‚ Exemple

pere(jean, pierre).

?- pere(jean, X).

pere(Jean,X)[X/pierre]

ñ Faire des inférences

Substitutionsde variablesadéquates dans lesrègles

‚ Exemple

pere(pierre, eliott).

gdpere(X,Y) :- pere(X, Z), pere(Z, Y).

?- gdpere(jean, X).

pere(X,Z)^pere(Z,Y)[X/jean,Y/eliott,Z/pierre]

$gdpere(Jean,Eliott)

gdpere(Jean,X)[X/Eliott]

(20)

Mécanismes de Prolog

Unification

§ Comment trouver une réponse à une requête ? ñ Unifier des clauses avec la requête

Substitutionsde variablesadéquates dans lesfaits

‚ Exemple

pere(jean, pierre).

?- pere(jean, X).

pere(Jean,X)[X/pierre]

ñ Faire des inférences

Substitutionsde variablesadéquates dans lesrègles

‚ Exemple

pere(pierre, eliott).

gdpere(X,Y) :- pere(X, Z), pere(Z, Y).

(21)

Mécanismes de Prolog

Opérateur de négation, d’unification, de listes

§ L’opérateurnot pour la négation

‚ impair(X) :- entier(X), not(pair(X))

§ L’opérateuris force l’unification entre expressions

‚ X is 3*2

§ Leslistes pour les ensembles ordonnées

‚ Liste vide :[]

‚ Liste de trois éléments :[a, b, c]

‚ Tête et queue de la liste :[Tete|Queue]

‚ enfants(X, [Aine|AutresEnfants])

(22)

Mécanismes de Prolog

Récursivité

§ Forte utilisation de la récursivité

‚ Sous forme logique, deux clauses

‚ Famille : fonction ancêtre (parent du parent du parent …)

ancetre(X,Y) :- parent(X,Y).

ancetre(X,Y) :- parent(X,Z), ancetre(Z,Y).

ñ Clause initiale et récursivité sur un prédicat ñ Attention à l’ordre des clauses

(23)

Mécanismes de Prolog

Exercice

§ Animaux

‚ Définissez un ensemble d’être vivants comme

Animaux

Végétaux

‚ Définissez

Des prédicatsmange(X,Y)avec des constantes

La règlecarnivore(X)

La règleherbivore(X)

La règleomnivore(X)

La règlepredateur(X,Y)

(24)

Mécanismes de Prolog

Exercice

§ Cuisine

‚ Le restaurant des plats (avec leurs ingrédients comme listes)

Salade (laitue, oignons, pain, huile)

Tomates (tomates, huile)

Pâté (canard, pain)

Lasagne (pâte, boeuf, oignons, tomates)

Légumes (patates, carottes, oignons, pain)

Escalope (patates, poulet)

Salade de fruits (pomme, banane, raisin)

Tarte (pâte, pomme)

Fondant (chocolat)

‚ Définissez comme listes

Les entrées, les plats et les desserts

Références

Documents relatifs

tail retourne la liste compos´ ee de tous les ´ el´ ements sauf le premier isEmpty retourne True ssi la liste est vide.. Ces op´ erations sont d´ efinies comme m´ ethodes des objets

Un polynˆome (creux) sera alors constitu´e d’une liste de monˆomes, cette liste n’´etant pas suppos´ee ˆetre tri´ee en fonction des degr´es des

On d´esigne par les lettre f , g et b les proposition atomiques « ˆetre membre de la direction financi`ere », « ˆetre membre de la direction g´en´erale »,« ˆetre membre de

TD de programmation fonctionnelle et logique Corrig´e du TP 1 : listes et r´ecursivit´e. Fonctions classiques sur les

Salade de pomme d’ amour et oignons, Papaye verte marinée à la menthe, Aubergines rôties au jus de citron, caramel et coriandre, Cresson et Ananas Vinaigrette à la noix de coco,

Proposer dans le tableau les ingrédients possibles pour fabriquer du pain. <a href="IMG/jpg/2010-05-26_172533pain.jpg" title='JPEG - 51

Placez les morceaux de concombre dans un blender avec le jus de citron, la menthe (gardez quelques feuilles pour la décoration) et l’huile d’olive.. Mixez le tout très finement,

‚ Le restaurant des plats (avec leurs ingrédients comme listes). ‚ Salade (laitue, oignons,