Le langage Prolog Cours n n 2

Documents pareils
Initiation à la Programmation en Logique avec SISCtus Prolog

Langage SQL (1) 4 septembre IUT Orléans. Introduction Le langage SQL : données Le langage SQL : requêtes

M é ca n ism e Pr o lo g. Ex e m p le

Le langage SQL Rappels

Corrigé des TD 1 à 5

Bases de Données. Plan

Maple: premiers calculs et premières applications

Cours Informatique Master STEP

UEO11 COURS/TD 1. nombres entiers et réels codés en mémoire centrale. Caractères alphabétiques et caractères spéciaux.

1 Introduction et installation

Programmation système I Les entrées/sorties

Bases de données Cours 5 : Base de données déductives

Les bases de données

1ère partie Nadine Cullot. Bases de données déductives. Bases de données déductives Introduction et Motivation

Langage SQL : créer et interroger une base

Chapitre 1 I:\ Soyez courageux!

Logique : ENSIIE 1A - contrôle final

Compléments de documentation Scilab : affichage de texte et formatage de nombres

Présentation du langage et premières fonctions

Cours d introduction à l informatique. Partie 2 : Comment écrire un algorithme? Qu est-ce qu une variable? Expressions et instructions

IN Cours 1. 1 Informatique, calculateurs. 2 Un premier programme en C

ECR_DESCRIPTION CHAR(80), ECR_MONTANT NUMBER(10,2) NOT NULL, ECR_SENS CHAR(1) NOT NULL) ;

INF 232: Langages et Automates. Travaux Dirigés. Université Joseph Fourier, Université Grenoble 1 Licence Sciences et Technologies

Introduction au Système de Gestion de Base de Données et aux Base de Données

Solutions du chapitre 4

ALGORITHMIQUE ET PROGRAMMATION En C

Conventions d écriture et outils de mise au point

Bases de données avancées Introduction

Définitions. Numéro à préciser. (Durée : )

Logique binaire. Aujourd'hui, l'algèbre de Boole trouve de nombreuses applications en informatique et dans la conception des circuits électroniques.

INF 321 : mémento de la syntaxe de Java

1/24. I passer d un problème exprimé en français à la réalisation d un. I expressions arithmétiques. I structures de contrôle (tests, boucles)

Python - introduction à la programmation et calcul scientifique

Bases de Données relationnelles et leurs systèmes de Gestion

Cours 1 : Introduction Ordinateurs - Langages de haut niveau - Application

16H Cours / 18H TD / 20H TP

Java et les bases de données

1. Structure d'un programme FORTRAN 95

Bases de programmation. Cours 5. Structurer les données

Vincent Augusto

Cours d initiation à la programmation en C++ Johann Cuenin

TD3: tableaux avancées, première classe et chaînes

Patrice BOURSIER. Professeur, Univ. de La Rochelle. Bases de Données. Notes de cours

TP 1. Prise en main du langage Python

Découverte de Python

Rappels d architecture

EPREUVE OPTIONNELLE d INFORMATIQUE CORRIGE

Plan. Bases de Données. Sources des transparents. Bases de SQL. L3 Info. Chapitre 4 : SQL LDD Le langage de manipulation de données : LMD

Compilation (INF 564)

Anne Tasso. Java. Le livre de. premier langage. 10 e édition. Avec 109 exercices corrigés. Groupe Eyrolles, , ISBN :

TP n 2 Concepts de la programmation Objets Master 1 mention IL, semestre 2 Le type Abstrait Pile

SYSTÈME DE GESTION DE FICHIERS

Algorithmique et Programmation, IMA

UML et les Bases de Données

STAGE IREM 0- Premiers pas en Python

INITIATION AU LANGAGE C SUR PIC DE MICROSHIP


Introduction aux bases de données. Généralités sur les bases de données. Fonctions d'un SGBD. Définitions. Indépendance par rapport aux traitements

LMI 2. Programmation Orientée Objet POO - Cours 9. Said Jabbour. jabbour@cril.univ-artois.fr

I. Introduction aux fonctions : les fonctions standards

TP3 : Manipulation et implantation de systèmes de fichiers 1

Bases de Données. Le cas des BD relationnelles ouverture sur les BD relationnelles spatiales Séance 2 : Mise en oeuvre

Algorithmique, Structures de données et langage C

Fondements de l informatique Logique, modèles, et calculs

Cours 7 : Utilisation de modules sous python

Module Administration BD Chapitre 1 : Surcouche procédurale dans les SGBDS

SYSTÈME DE GESTION DE FICHIERS SGF - DISQUE

Chapitre 2. Eléments pour comprendre un énoncé

Exonet : sauvegarde automatisée d une base de données

MICROINFORMATIQUE NOTE D APPLICATION 1 (REV. 2011) ARITHMETIQUE EN ASSEMBLEUR ET EN C

Algorithmique et programmation : les bases (VBA) Corrigé

Programmation système de commandes en C

Chapitre 10 Arithmétique réelle

Cours de C++ François Laroussinie. 2 novembre Dept. d Informatique, ENS de Cachan

Informatique Générale

TP Bases de données réparties

DE L ALGORITHME AU PROGRAMME INTRO AU LANGAGE C 51

MapReduce. Malo Jaffré, Pablo Rauzy. 16 avril 2010 ENS. Malo Jaffré, Pablo Rauzy (ENS) MapReduce 16 avril / 15

Manuel d utilisation 26 juin Tâche à effectuer : écrire un algorithme 2

Rappels Entrées -Sorties

Le Langage SQL version Oracle

1. Structure d un programme C. 2. Commentaire: /*..texte */ On utilise aussi le commentaire du C++ qui est valable pour C: 3.

INTRODUCTION A JAVA. Fichier en langage machine Exécutable

MATLAB : COMMANDES DE BASE. Note : lorsqu applicable, l équivalent en langage C est indiqué entre les délimiteurs /* */.

Exemple accessible via une interface Web. Bases de données et systèmes de gestion de bases de données. Généralités. Définitions

TP Contraintes - Triggers

Langage propre à Oracle basé sur ADA. Offre une extension procédurale à SQL

Bases de données et sites WEB Licence d informatique LI345

length : A N add : Z Z Z (n 1, n 2 ) n 1 + n 2

Rappel sur les bases de données

Java et les bases de données: JDBC: Java DataBase Connectivity SQLJ: Embedded SQL in Java. Michel Bonjour

Info0101 Intro. à l'algorithmique et à la programmation. Cours 3. Le langage Java

Chap III : Les tableaux

Développement d applications Internet et réseaux avec LabVIEW. Alexandre STANURSKI National Instruments France

Cours d Informatique

Cours 1 : Qu est-ce que la programmation?

MySQL / SQL EXEMPLES

Programmation Classique en langage C

Aide - mémoire gnuplot 4.0

Analyse de sécurité de logiciels système par typage statique

Transcription:

Le langage Prolog Cours n 2

Commentaires dans un programme Prolog Commentaire sur plusieurs lignes /* lignes */ de commentaires l interprète ignore le texte entre slash étoile et étoile slash Commentaire sur une seule ligne %l interprète ignore le texte après le caractère pourcent

Structures de données Objets atomiques : nombres et variables Il existe aussi une structure de données plus complexe appelée arbre Prolog ou structure Prolog. Prolog connaît aussi les listes. Ces structures feront l objet de prochains cours.

Les opérateurs Ils permettent d utiliser une syntaxe infixée, préfixée ou suffixée pour écrire des prédicats. Ce terme n est pas réservé aux opérateurs arithmétiques (+, -, * et / sont des opérateurs infixés). Ils ont des priorités différentes.

Les opérateurs Opérateur binaire infixé : il figure entre ses 2 arguments et désigne un arbre binaire X + Y + X Y Opérateur unaire préfixé : il figure avant son argument et désigne un arbre unaire -X - X

Les expressions arithmétiques Prolog connaît les entiers et les nombres flottants. Les expressions arithmétiques sont construites à partir de nombres, de variables et d'opérateurs arithmétiques. Evaluation : par l utilisation de l'opérateur is par exemple dans X is 3-2.

Les expressions arithmétiques Opérations habituelles : addition (+), soustraction (-), multiplication (*), division entière (//), division flottante (/), modulo (mod) Fonctions mathématiques préféfinies : abs(x), log(x), sqrt(x), exp(x), sign(x), random(x), sin(x), cos(x), tan(x), min(x,y), max(x,y), etc. Les expressions sont représentées par des arbres Prolog

Les expressions arithmétiques Expressions et unification : attention à certaines tentatives d unification la tentative d unification entre 3+2 et 5 échouera. En effet, l expression 3+2 est un arbre alors que 5 est un nombre. L'évaluation des expressions ne fait pas partie de l algorithme d unification.

Les prédicats de comparaison Comparaison des expressions arithmétiques * X =:= Y se traduit par X est égal à Y * X=\= Y se traduit par X est différent de Y * X < Y * X =< Y * X > Y * X >= Y Il y a évaluation puis comparaison.?- 5 = 3 + 2. false?- 5 =:= 3 + 2. true

Comparaison et unification de termes Fonctions de vérification de type : var, nonvar, integer, float, number, atom, string, Comparer deux termes : T1==T2 réussit si T1 est identique à T2 T1\==T2 réussit si T1 n est pas identique à T2 T1=T2 unifie T1 avec T2 T1\=T2 réussit si T1 n est pas unifiable à T2 Exemple:?- f(x)==f(x). No?- f(x)=f(x). X = x Yes

La négation Problème de la négation et de la différence en Prolog Pas de moyen en Prolog de démontrer qu une formule n est nest pas déductible.

La négation Négation par l'échec Si F est une formule, sa négation est notée not(f) ou not F. L'opérateur not est préfixé. Prolog pratique la négation par l'échec, c est-à-dire que pour démontrer not(f) Prolog va tenter de démontrer F. Si la démonstration de F échoue, Prolog considère que not(f) est démontrée. Pour Prolog, not(f) signifie que la formule F n est pas démontrable, et non que c est cest une formule fausse. C est ce que l on appelle l'hypothèse du monde clos.

La négation Elle est utilisée pour vérifier qu une formule n est pas vraie. La négation par l'échec ne doit être utilisée que sur des prédicats dont les arguments sont déterminés et à des fins de vérification. Son utilisation ne détermine jamais la valeur d une variable

La négation Dangers : Considérez le programme suivant : p(a). Et interrogez Prolog avec :?- X = b, not p(x). YES { X = b } Prolog répond positivement car p(b) n est pas démontrable.

La négation Par contre, interrogez le avec :?- not p(x), X=b. No Prolog répond négativement car p(x) étant démontrable avec X = a, not p(x) est considéré comme faux. => Incohérence qui peut être corrigée si l on applique la règle vue précédemment : n utiliser la négation que sur des prédicats dont les arguments sont déterminés.

La négation L unification : Prédicat binaire infixé : X = Y Pour démontrer X = Y, Prolog unifie X et Y ; s il réussit, la démonstration est réussie, et le calcul continue avec les valeurs des variables déterminées par l unification.?- X = 2. Yes?- X = 2, Y = 3, X = Y. No

La négation (fin) La différence est définie comme le contraire de l unification Elle est notée : X \= Y. Elle signifie que X et Y ne sont pas unifiables, et non qu ils sont différents. Ex : Z \= 3. Sera faux car Z et 3 sont unifiables. Elle peut être définie i comme : X \= Y :- not X = Y.

Symboles fonctionnels La fonction «femme de Jean» est différente du prédicat femme(marie,jean). nom(femme(jean),marie). age(femme(jean),25). On peut parler de la femme de jean, mais pas la «calculer»

Programmation récursive Rappel : un programme récursif est un programme qui s appelle lui-même Exemple : factorielle factorielle(1) = 1 (Cas de base) factorielle(n) = n * factorielle(n-1) si n 1

Pour écrire un programme récursif Il faut : Choisir sur quoi faire l appel récursif Définir la relation de récurrence Définir le(s) cas de base

Exemple : Factorielle fact(1, 1). fact(a, B) :- CisA-1 A-1, fact(c, D), B is A*D D.?- fact(5,r). R = 120 ; ERROR: Out of local stack?- Il faut des cas exclusifs!

Exemple : Factorielle fact(1, 1). fact(a, B) :- fact(c, D), C is A-1, B is A*D D.?- fact(5,f). ERROR: is/2: Arguments are not sufficiently instantiated ^ Exception: (9) 1 is _G307-1

Exemple : Factorielle fact(1, 1). fact(x, F) :- X > 1, C is X-1, fact(c, F1), F is X*F1.?- fact(5,f). F = 120 ; No On a conçu la fonction par rapport à X X doit obligatoirement être instanciée?- fact(x,120). ERROR: is/2: Arguments are not sufficiently instantiated

Les entrées-sorties (1) Ecriture sur l'écran ou dans un fichier Lecture à partir du clavier ou d un dun fichier Affichage de termes : * write(1+2) affiche 1+2 * write(x). affiche X sur l'écran, sous la forme _245 qui est le nom interne de la variable. * nl/0 : nl permet de passer à la ligne * tab/1 : tab(n) affiche N espaces Remarque de notation en Prolog: pred/n indique que pred est un prédicat d arité n

Les entrées-sorties (2) Affichage de termes (suite) : * display/1 agit comme write/1 mais en affichant la représentation sous forme d arbre * Ex : write(3+4), nl, display(3+4), nl. Affiche : 3+4 +(3,4) YES

Les entrées-sorties (3) Affichage de caractères et de chaînes put/1 s utilise en donnant le code ASCII d un dun caractère : put(97). affiche : a Prolog connaît aussi les chaînes de caractères. Elles sont notées entre " ". Mais pour Prolog la chaîne est une liste de codes ASCII des caractères la composant.

Les entrées-sorties (4) Lecture de termes : read/1 admet n importe quel terme en argument. read lit un terme au clavier et l unifie avec son argument. Le terme lu doit être obligatoirement suivi d un point. Certains systèmes Prolog affichent un signe d invite lorsque le prédicat read/1 est utilisé. Exemple :?- read(x). :a(12) a(1,2). YES {X = a(1,2)}

Les entrées-sorties (5) Lecture de caractères : get/1 et get0/1. Tous les deux prennent en argument un terme unifié avec le code ASCII du caractère lu. Si l argument est une variable, celle-ci prendra pour valeur le code ASCII du caractère lu. get/1 ne lit que les caractères de code compris entre 33 et 126, pour les autres caractères utiliser get0.

Les entrées-sorties (6) Les fichiers : Un fichier peut être ouvert en lecture ou écriture. En écriture : mode write : son contenu est effacé avant que Prolog y écrive. mode append : Prolog écrira à partir de la fin du fichier. Ouverture d un fichier : prédicat open/3 argument 1 : nom du fichier argument 2 : mode d ouverture write, append ou read argument 3 : variable qui va recevoir un identificateur de fichier appelé flux ou stream.

Les entrées-sorties (7) Tous les prédicats read, write et autres vus auparavant admettent un second argument : le flux identifiant le fichier. * Ex : write(flux, X). où Flux est un identificateur de fichier * Ex : read(flux,x), get(flux, X), get0(flux,x) * Fermeture du fichier : prédicat close/1 qui prend en argument le flux associé au fichier.

Les entrées-sorties (fin) Exemple d utilisation ecrire(t) :- open( a.pl, append, Flux), /* ouverture */ write(flux, T), nl(flux), /* écriture */ close(flux). /* fermeture */

Un petit problème? Trouver les chiffres qui correspondent à chaque lettre MOT + MOT +MOT BLA

Bases de données et Prolog

Bases de données et Prolog On peut facilement représenter des tuples de relations par des faits Prolog. Les diverses opérations de l algèbre relationnelle se réalisent facilement par des requêtes en Prolog.

Rappel : Algèbre relationnelle Ensemble d opérations logiques permettant de manipuler des relations. Le résultat de toute opération de l'algèbre est une relation. On distingue les opérations ensemblistes les opérations propres aux bases de données

Algèbre relationnelle Opérations ensemblistes : l union notée, l intersection notée, la différence notée - le produit cartésien noté X Opérations propres aux bases de données : la sélection notée σ la projection notée Π le produit noté *

Algèbre relationnelle en Prolog Opérations ensemblistes : l union R1 R2 représente l union des lignes des relations R1 et R2. Pour pouvoir effectuer cette opération, les relations R1 et R2 doivent avoir les mêmes attributs. r(a,1). r(b,2). r(c,3). s(a,1). s(e,2). s(f,1). union(x,y) :- r(x,y) ; s(x,y).

Algèbre relationnelle en Prolog Opérations ensemblistes : l intersection R1 R2 représente l intersection des lignes des relations R1 et R2. R1 et R2 doivent avoir les mêmes attributs. r(a,1). r(b,2). r(c,3). s(a,1). s(e,2). s(f,1). intersection(x,y) :- r(x,y), s(x,y).

Algèbre relationnelle en Prolog Opérations ensemblistes : la différence R1 R2 représente la différence des relations R1 et R2 : lignes de R1 qui ne sont pas présentes dans R2. On a : R1-R2 = R1 - (R1 R2) R1 et R2 doivent avoir les mêmes attributs. r(a,1). r(b,2). r(c,3). s(a,1). s(e,2). s(f,1). difference(x,y) :- r(x,y), not(s(x,y)).

Algèbre relationnelle en Prolog Le produit cartésien R1 X R2 représente la relation formée des attributs des relations R1 et R2, construite en combinant chaque n-uplet de R1 avec tous les n-uplets de R2. r(a,1). r(b,2). r(c,3). s(a,1). s(e,2). s(f,1). prodcart(a,b,c,d) :- r(a,b), s(c,d).

Algèbre relationnelle en Prolog La sélection : σ(p)(r) représente les lignes de la relation R qui vérifient la propriété P exprimée sous la forme d une expression logique : r(a,1). r(b,2). r(c,3). r(d,5). r(a,3). σ (A2<3)(R) select(x,y) :- r(x,y), Y<3.

Algèbre relationnelle en Prolog La projection : sélection de colonnes. Π(A1,..., Ak)(R) représente la sous-table de R formée uniquement des colonnes dont les attributs ont été spécifiés (A1,..., Ak). Si après cette opération plusieurs lignes sont identiques, les doublons sont éliminés (pas en Prolog). projection(x,y) :- r(x,_,_,y). r(a,1,xxx,12). r(b,2,c,15). r(c,3,as,123). r(d,5,aaa,23). r(a,3,ddd,7). Π (A1,A4)(R)

Algèbre relationnelle en Prolog La jointure naturelle R1 R2 représente la relation formée de l'union des attributs de R1 et de R2, les lignes de cette relation sont les n-uplets de R1 concaténés aux n-uplets de R2 si les attributs communs à R1 et R2 ont la même valeur.

Algèbre relationnelle en Prolog La jointure naturelle Cette opération n'est possible que si les schémas de R1 et de R2 ont une intersection non vide. r(d,3). r(b,2). r(c,3). s(d,3). s(c,2). s(a,1). jointure(x,y,z) :- r(x,y), s(x,z).

Algèbre relationnelle La jointure R1 R2 [Q] représente la relation formée de l'union des attributs de R1 et de R2, les lignes de cette relation sont les n-uplets de R1 concaténés é aux n-uplets de R2 pour lesquels l la qualification Q est vérifiée. Ceci constitue la forme générale d une jointure.

Algèbre relationnelle La jointure Exemple : R S [A2 =A4 ] r(d,3). r(b,2). r(c,3). s(d,3). s(c,2). s(a,1). jointure(a,b,c,d) :- r(a,b), s(c,d), B==D.