PROLOG - C++ : langage procédural - Prolog : langage déclaratif - Prolog = PROgrammation LOGique - Inventeur : Colmerauer en 1970 - Utilisé en intelligence artificielle - exemples : - problème des 8 reines - SEND + MORE = MONEY - ... Le langage - Un programme Prolog est une suite de clauses : - faits (X est un astre) - règles (X est une planète si X est un astre et X est un satellite d'une étoile) - requêtes (Quels sont tous les astres ?) Faits - Prédicat(arg1, arg2, ... , argn) - capitale(france,paris). - astre(terre). - étoile(soleil). - satellite(terre,soleil). - satellite(lune,terre). - plus_petit_que(3,6). - factoriel(0,1) Règles planète(X) :- astre(X), étoile(Y), satellite(X,Y). oncle(X,Y) :- père(Z,Y),frère(Z,X). Rmq : les variables commencent par une majuscule ! Requêtes planète(terre). yes planète(X). X = terre. planète(soleil). no Fonctionnement planète(X) ET astre(X) astre(terre). astre(lune). astre(soleil). satellite(terre,soleil). satellite(lune,terre). étoile(véga). étoile(soleil). planète(X) :- astre(X), étoile(Y), satellite(X,Y). étoile(Y) satellite(X,Y) Exercice - On dispose de faits utilisant les prédicats parent, homme et femme : parent(jean,léon). parent(jeanne, léon). homme(jean). femme(jeanne). etc... - Ecrire les prédicats père, mère, frère, soeur, fils, fille, oncle, tante, neveu et nièce, grand-père, grand-mère... Autre exemple parent(alain,jean). parent(jean,bruno). parent(bruno,louis). ancetre(X,Y) :- parent(X,Y). ancetre(X,Y) :- parent(X,Z),ancetre(Z,Y). Requête : ancetre(X,Y). ancetre(X,Y) OU ET parent(X,Y) parent(X,Z) parent(alain,jean). parent(jean,bruno). parent(bruno,louis). ancetre(X,Y) :- parent(X,Y). ancetre(X,Y) :- parent(X,Z),ancetre(Z,Y). ancetre(Z,Y) ancetre(X,Y) OU ET parent(X,Y) parent(X,Z) ancetre(Z,Y) X=alain, Y=jean X=jean, Y=bruno X=bruno, Y=louis X=alain, Y=bruno X=alain, Y=louis X=jean, Y=louis parent(alain,jean). parent(jean,bruno). parent(bruno,louis). ancetre(X,Y) :- parent(X,Y). ancetre(X,Y) :- parent(X,Z),ancetre(Z,Y). Factorielle fact(0,1). fact(X,N):- X1 is X-1, fact(X1,N1), N is N1*X. Requête : fact(5,N). N=120 Minimum min(A,B,A) :- A < B. min(A,B,B) :- A >= B. Requêtes : min(3,4,X). X=3 min(1,4,4). no Les listes - temps_semaine([12,14,9,6,11,10,15]). - élèves([jean,marie,léon,bernard]). - [X|L] : X est le premier élément, L est le reste. - Exemple : premier([X|L],X).