Télécharger la présentation
La présentation est en train de télécharger. S'il vous plaît, attendez
1
Chapitre III : Les Systèmes experts
Intelligence Artificielle Chapitre IV Programmation fonctionnelle : Langage Lisp EPSI / Montpellier - Cycle CSII 2A EPSI/Montpellier Cycle CSII 2A Module Intelligence Artificielle
2
Programmation fonctionnelle : Langage Lisp
Introduction Types de programmation Programmation procudérale (impérative) : on donne à l ’ordinateur toutes les étapes pour résoudre le problème Aspect séquentiel des programmes Notions d ’affectation, de condition et de répétition Programmation déclarative : on décrit le rapport entre les données et les résultats Programmation logique : PROLOG Programmation fonctionnelle : LISP
3
Programmation fonctionnelle : Langage Lisp
Historique du langage Lisp (LISt Processing) 1958 : Création de Lisp par John Mac Carthy Travaux de Alonzo Church sur le lambda-calcul Travaux de John Mac Carthy sur les fonctions récursives : Prolifération des dialectes Lisp 1984 : Normalisation ANSI X3J13 de Lisp par Guy L. Steele Définition du dialecte Common Lisp 1989 : Publication officielle de la norme X3J13 La norme Common Lisp est arrêté en Octobre 1989
4
Programmation fonctionnelle : Langage Lisp
Caractéristique de Lisp Un langage généralement interprété Un langage de haut niveau Un langage extensible L’objet de base est la fonction Un programme = un ensemble de définitions et d ’appels de fonctions L ’opération de base est l ’évaluation d ’une expression Application d ’une fonction à une liste d ’arguments Structure de données Les données et les programmes sont représentés par des listes
5
Programmation fonctionnelle : Langage Lisp
Caractéristiques de Lisp Lisp manipule des données symboliques Donnée symbolique = s-expression Lisp offre une approche objet de programmation Classes et fonctions génériques Lisp est un langage interactif Boucle à trois temps(REPL:Read-Eval-Print Loop) Lecture d ’une expression symbolique (une s-expression) Évaluation de l ’expression Écriture du résultat (une s-expression) read eval print
6
Programmation fonctionnelle : Langage Lisp
Caractéristiques de Lisp Lisp est dédié au traitement symbolique : Modélisation du raisonnement Traitement du langage naturel Lisp a une très grande puissance d ’expression Idéal pour le prototypage des modèles en I.A Pas de distinction entre donnée et programme Code = donnée Du code qui écrit du code Le code est particulièrement concis
7
Programmation fonctionnelle : Langage Lisp
Apprendre à programmer en Lisp Maîtriser la syntaxe des s-expression Comprendre les règles d ’évaluation Connaître les fonctions prédéfinies Acquérir la méthodologie et l’esprit « programmation fonctionnelle »
8
Programmation fonctionnelle : Langage Lisp
Les dialectes de Lisp Le_Lisp Mac Lisp Frantz Lisp Koyoto Common Lisp Scheme etc.
9
Programmation fonctionnelle : Langage Lisp
Le dialecte Scheme Dialecte inventé en 1975 par Steele & Sussmann au MIT Une reconstruction minimale de Lisp conçue à des fins pédagogiques Scheme a été normalisé par l'IEEE puis par l'ISO en 1992 En1997, GNU distributeur d‘Emacs choisit Scheme comme langage d'extension dans les applications [projet GUILE] Plusieurs implémentations de Scheme sont disponibles : DrScheme (Université de Rice à Houston, Texas, USA) : tourne sous Unix, Windows, et Macintosh Chez Scheme (Cadence Research Systems, USA) Scheme->C (Digital Equipment Corporation, Palo Alto, Californie, USA) Bigloo (Inria, France)
10
Programmation fonctionnelle : Langage Lisp
Premiers exemples Calculer des expressions > (* 24 5) > (/ 120 6) Afficher un message > (define (Afficher-Bonjour) Définition d ’une fonction (display "Bonjour à tous") (newline) ) > (Afficher-Bonjour) Appel d ’une fonction Appliquer une fonction en inversant l ’ordre des arguments > (define (fonction-inverse fonction arguments) (apply fonction (reverse arguments)) > (fonction-inverse - '(25 40))
11
Programmation fonctionnelle : Langage Lisp
Premiers exemples Utiliser les fonctions anonymes (fonctions lambdas) > (define somcar (lambda(x y) (+ (* x x) (* y y)))) > ((map (lambda (n) (* n n)) '( ))
12
Programmation fonctionnelle : Langage Lisp
Syntaxe de Lisp Syntaxe des s-expressions s-expression atomes constantes :numériques (nombres) et symboliques (chaîne de caractères) variables (identificateurs) listes liste vide () listes non vides (une suite de s-expressions)
13
Programmation fonctionnelle : Langage Lisp
Syntaxe de Lisp Syntaxe des s-expressions atome nombres :exemples entier : flottant : rationnel : 1/3 2/8 Chaîne de caractères :exemples Caractère : #\a #\I #\5 #\\ Chaîne de caractères : "EPSI" " " " x " "Cours de \"LISP\"" Booléens : #t : vrai #f:faux
14
Programmation fonctionnelle : Langage Lisp
Syntaxe de Lisp Syntaxe des s-expressions atome Variables (identificateurs) : une chaîne de caractères qui n ’est pas une constante et qui ne contient pas de séparateurs : ( ; ) ‘ espace pas de distinction majuscule/minuscule pas besoin de déclarer une variable toute variable doit être définie à l ’aide de la fonction define à toute variable est attribuée une valeur initiale : syntaxe : (define variable expr) exemples : (define a 10) (define F 15) (define G (* 4 F)) (define-values (x y) (values 3 4))
15
Programmation fonctionnelle : Langage Lisp
Syntaxe de Lisp Syntaxe des s-expressions atome Variables (identificateurs) : Exemples des varibales ne sont pas des variables y 485 forte_fievre "votre nom ?" *regles* (x) <h>_os un deux trois
16
Programmation fonctionnelle : Langage Lisp
Syntaxe de Lisp Syntaxe des s-expressions liste structure formée de plusieurs s-expressions (atomes et/ou listes) la liste vide se note () Exemples (Mieux vaut tard que jamais) (4 fois 5 eqale 20) (((ceci est) (une liste)) ( de deux elements))
17
Programmation fonctionnelle : Langage Lisp
Syntaxe de Lisp Exemples de s-expressions #\A atome de type caractère constante 100 atome de type entier 7/8 atome de type rationnel constante #t atome TRUE constante #f atome FALSE constante NULL atome NULL constante "lisp" atome de type chaîne de caractères constante epsi atome de type variable variable (symbole) () liste vide (()) liste à 1 élément (* 5 6) liste à 3 éléments (janvier fevrier (mars avril) juin (septembre octobre)) liste à 5 éléments (define (carre x) (* x x)) liste à 3 éléments
18
Chapitre III : Les Systèmes experts
Programmation fonctionnelle : Langage Lisp Evaluation des expressions Evaluation d’un atome (constantes, variables) Constante valeur d’une constante = la constante elle même Variable valeur d’une variable = la valeur courante de la variable qui doit être définie Exemples > 573 573 > « quel est votre nom ? » « quel est votre nom ? » > (define annee-courante 2002) > annee-courante 2002 > mois > erreur : reference to undefined identifier: mois - Evaluation d'1 expr = déterminer la valeur de cette expr : valeur renvoyé par l'ontrépréteur - Valeur d'1 cte = la cte - Valuer d'1 string = la string EPSI/Montpellier Cycle CSII 2A Module Intelligence Artificielle
19
Programmation fonctionnelle : Langage Lisp
Evaluation des expressions Evaluation d’une liste (expr0 expr1 … exprn) Evaluation en 2 étapes étape 1 : évaluation de expr1 … exprn puis de expr0. Si vi est est le résultat de l ’évaluation de expri Alors v0 doit être une fonction étape 2 : application de v0 aux arguments v1 … vn une erreur survient si v0 n ’est pas une fonction n n ’est pas le nbre d ’arguments requis par cette fonction
20
Programmation fonctionnelle : Langage Lisp
Evaluation des expressions Evaluation d’une liste (expr0 expr1 … exprn) Exemples > (7 9 13) erreur: 7 n ’est pas une fonction > (remainder 13 2) 1 > (zero? (remainder 20 5)) #t >(define x 5) > (define y 10) > (define operateur /) > (operateur y x) 2
21
Programmation fonctionnelle : Langage Lisp
Evaluation des expressions Evaluation d’une liste (expr0 expr1 … exprn) Exemple : évaluation de la liste (+ 3 (sqrt 2) (* 2 3 4)) 1. 1.1 Evaluation de 3 3 => 3 1.2 Evaluation de (sqrt 2) 1.2.1 Evaluation de 2 2 => 2 1.2.2 1.3 Evaluation de (* 2 3 4) 1.3.1 Evaluation de 2 1.3.2 Evaluation de 3 1.3.3 Evaluation de 4 4 => 4 x3x4 => 24 => 2 => 1.414
22
Chapitre III : Les Systèmes experts
Programmation fonctionnelle : Langage Lisp Evaluation des expressions Evaluation d’une expression quoté Expression quoté (quote expr) 'expr quote : un moyen de suspendre l ’évaluation d ’une expression Evaluation de (quote expr) = expr Evaluation de ’expr = expr - sans quote, toute liste serair prise comme un appel de fonction - l'expression qu'elle précède est à prendre litérallement comme une donnée et non pas comme une commande - sa nécessité provient du fait que la syntaxe de lisp ne fait pas de différence entre donnée et instruction EPSI/Montpellier Cycle CSII 2A Module Intelligence Artificielle
23
Chapitre III : Les Systèmes experts
Programmation fonctionnelle : Langage Lisp Evaluation des expressions Evaluation d’une expression quoté Exemples > bonjour erreur : reference to undefined identifier: bonjour > 'bonjour bonjour > ( ) erreur : 1 n ’est pas une fonction > '( ) ( ) > (+ 5 7) 12 > '(+ 5 7) (+ 5 7) > ''(+ 5 7) ‘ (+ 5 7) - sans quote, toute liste serair prise comme un appel de fonction - l'expression qu'elle précède est à prendre litérallement comme une donnée et non pas comme une commande - sa nécessité provient du fait que la syntaxe de lisp ne fait pas de différence entre donnée et instruction > (quote (a b c)) (a b c) > '(a b c) EPSI/Montpellier Cycle CSII 2A Module Intelligence Artificielle
24
Chapitre III : Les Systèmes experts
Programmation fonctionnelle : Langage Lisp Evaluation des expressions Evaluation d’une forme spéciale Forme spéciale : une expression dont le premier élément est un mot-clef réservé L ’évaluation d ’une forme spéciale ne commence pas nécessairement par l ’évaluation de ces arguments Exemple tajouter une dipao pour quote, eval et type-of L ’évaluation de l ’expression (define nbre 812) provoquerait une erreur (nbre n ’est pas défini) si define n ’était un mot clef-réservé (une fonction spéciale) EPSI/Montpellier Cycle CSII 2A Module Intelligence Artificielle
25
Chapitre III : Les Systèmes experts
Programmation fonctionnelle : Langage Lisp Manipulation des listes Représentation interne des listes les listes sont implémentées en mémoire à l ’aide de doublets de pointeurs : CAR : Content of Adress Register CDR : Content of Decrement Register Les doublets de pointeurs sont allouées dynamiquement avec une fonction spéciale appelée cons CAR CDR . (car.cdr) queue Paire pointée tête tajouter une dipao pour quote, eval et type-of EPSI/Montpellier Cycle CSII 2A Module Intelligence Artificielle
26
Chapitre III : Les Systèmes experts
Programmation fonctionnelle : Langage Lisp Manipulation des listes Représentation interne des listes (a) <=> (a.()) (2 1) <=> (2.(1.())) (3 2 1) <=> (3.(2.(1.()))) (a b c) <=> (a.(b.(c.()))) tajouter une dipao pour quote, eval et type-of EPSI/Montpellier Cycle CSII 2A Module Intelligence Artificielle
27
Chapitre III : Les Systèmes experts
Programmation fonctionnelle : Langage Lisp Manipulation des listes Fonctions de consultation Fonction car Syntaxe : (car liste) l ’argument évalué de car doit être une liste Evaluation : renvoie le premier élément d ’une liste Exemples > (car (+ 7 11)) car: expects argument of type <pair>; given 18 > (car '(+ 7 11)) + > (car '(())) () > (car '(paul . pierre)) paul > (car '(paul pierre)) > (car '((paul pierre) michel maurice)) (paul pierre) tajouter une dipao pour quote, eval et type-of EPSI/Montpellier Cycle CSII 2A Module Intelligence Artificielle
28
Chapitre III : Les Systèmes experts
Programmation fonctionnelle : Langage Lisp Manipulation des listes Fonctions de consultation Fonction cdr Syntaxe : (cdr liste) l ’argument évalué de cdr doit être une liste Evaluation : renvoie une liste privée de son premier élément Exemples > (cdr (+ 7 11)) cdr: expects argument of type <pair>; given 18 > (cdr '( )) (2 3 4) > (cdr '(+ 1 2)) (1 2) > (cdr '(a (b c))) ((b c)) > (car (cdr '(a (b c)))) (b c) tajouter une dipao pour quote, eval et type-of EPSI/Montpellier Cycle CSII 2A Module Intelligence Artificielle
29
Chapitre III : Les Systèmes experts
Programmation fonctionnelle : Langage Lisp Manipulation des listes Fonctions de consultation Composition de car et de cdr Les fonctions car et cdr sont très souvent utilisées en Lisp Il existe des fonctions pour certaines compositions de car et de cdr (cdr(car(cdr '(a (b c) d)))) <=> (cdadr '(a (b c) d)) Exemples tajouter une dipao pour quote, eval et type-of > (cdadr '(a (b c) d)) (c) > (caadr '(a (b c) d)) b > (cdddr '(a (b c) d)) () > (cadar '(a (b c) d)) erreur EPSI/Montpellier Cycle CSII 2A Module Intelligence Artificielle
30
Chapitre III : Les Systèmes experts
Programmation fonctionnelle : Langage Lisp Manipulation des listes Fonctions de construction Fonction cons Syntaxe : (cons expr1 expr2) Evaluation : si valeur de expr1 = a et valeur de expr2 = b alors valeur de (cons expr1 expr2) = (a . b) Exemples > (cons 'a ' (b c d)) (a b c d) > (cons 'a ’b) (a . b) >(cons 'a ()) (a) > (cons '(a b) '(c d)) ((a b) c d) > (cons 'a (cons 'b '(c d))) tajouter une dipao pour quote, eval et type-of EPSI/Montpellier Cycle CSII 2A Module Intelligence Artificielle
31
Chapitre III : Les Systèmes experts
Programmation fonctionnelle : Langage Lisp Manipulation des listes Fonctions de construction Fonction list Syntaxe : (list expr1 expr2 … exprn) Evaluation : renvoie une liste dont les éléments sont les valeurs de expr1 expr2 ... Exprn (list ’a ’b ’c) <=> (cons ’a (cons ’b (cons ’c ()))) Exemples tajouter une dipao pour quote, eval et type-of > (list 'a ’b ’c) (a b c) >(list (+1 3) ’paul (car ’ (a b)) (symbol? ’paul)) (4 paul a #t) > (list (list ’ ())) ((())) EPSI/Montpellier Cycle CSII 2A Module Intelligence Artificielle
32
Chapitre III : Les Systèmes experts
Programmation fonctionnelle : Langage Lisp Manipulation des listes Fonctions de construction Fonction append Syntaxe : (append liste1 liste2 … listen) Les arguments sauf le dernier qui n ’est pas une liste génère une erreur Evaluation : concatène une série de listes Exemples tajouter une dipao pour quote, eval et type-of > (append ’(a b) (’c ’d)) (a b c d) >(append ’a ’(2 3)) erreur : append: expects argument of type <proper list>; given a > (append ’(x y) ’z) (x y . z) EPSI/Montpellier Cycle CSII 2A Module Intelligence Artificielle
33
Chapitre III : Les Systèmes experts
Programmation fonctionnelle : Langage Lisp Manipulation des listes Fonctions de traitement Fonction length Syntaxe : (length liste) Evaluation : Renvoie la longueur d’une liste Exemples tajouter une dipao pour quote, eval et type-of > (length ’(a b c)) 3 >(length ’()) > (length ’(a (b) (c d e))) EPSI/Montpellier Cycle CSII 2A Module Intelligence Artificielle
34
Chapitre III : Les Systèmes experts
Programmation fonctionnelle : Langage Lisp Manipulation des listes Fonctions de traitement Fonction reverse Syntaxe : (reverse liste) Evaluation : Renvoie l’inverse d’une liste Exemples tajouter une dipao pour quote, eval et type-of > (reverse ’(a b c)) (c b a) > (reverse ’(a (b) (c d e))) ((c d e) (b) a) EPSI/Montpellier Cycle CSII 2A Module Intelligence Artificielle
35
Chapitre III : Les Systèmes experts
Programmation fonctionnelle : Langage Lisp Variables et fonctions Définition de variables Forme spéciale define Syntaxe : (define nom-variable expression) Evaluation : Crée une variable globale nommée nom-variable et lui associe la valeur de expression Exemples tajouter une dipao pour quote, eval et type-of > (define x (+ 2 3)) > x 5 > (define base-de-regles ()) EPSI/Montpellier Cycle CSII 2A Module Intelligence Artificielle
36
Chapitre III : Les Systèmes experts
Programmation fonctionnelle : Langage Lisp Variables et fonctions Affectations Primitive set! Syntaxe : (set! nom-variable expression) Evaluation : Affecte à la variable nommée nom-variable la valeur de expression Exemples > (define a (+ 2 3)) > (+ a 5) 10 > (set! a (+ a 2) > a 7 > (set! a ’(b c)) (b c) tajouter une dipao pour quote, eval et type-of EPSI/Montpellier Cycle CSII 2A Module Intelligence Artificielle
37
Chapitre III : Les Systèmes experts
Programmation fonctionnelle : Langage Lisp Variables et fonctions Affectations Primitive let Syntaxe : (let ((var1 expr1) (var2 expr2) ...) e1 e2 … en) Evaluation : Affecte à la variable locale nommée var1 la valeur de expr1 et à la variable var2 la valeur de expr2 …, puis évalue e1 e2 .. en et renvoie la valeur de en Exemples tajouter une dipao pour quote, eval et type-of > (let ((a 12) (b 5)) (* a b)) 60 EPSI/Montpellier Cycle CSII 2A Module Intelligence Artificielle
38
Chapitre III : Les Systèmes experts
Programmation fonctionnelle : Langage Lisp Variables et fonctions Définition de fonctions Forme spéciale define Syntaxe : (define (nom arg1 arg2 … argn) expr1 expr2 … exprn) avec :nom : nom de la fonction arg1, arg2, … argn : arguments formels expr1, expr2, … exprn : corps de la fonction Evaluation : Crée une fonction nommée nom, ayant pour arguments arg1, arg2, … argn, et pour corps les expressions expr1, expr2, … exprn Exemple tajouter une dipao pour quote, eval et type-of > (define (carre x) (* x x)) EPSI/Montpellier Cycle CSII 2A Module Intelligence Artificielle
39
Chapitre III : Les Systèmes experts
Programmation fonctionnelle : Langage Lisp Variables et fonctions Appel de fonctions Syntaxe : (nom arg1 arg2 … argn) avec : nom : nom de la fonction arg1, arg2, … argn : arguments effectifs Exemples tajouter une dipao pour quote, eval et type-of > (carre (+ 2 3)) 25 > (define (trois) 3) > (trois) 3 EPSI/Montpellier Cycle CSII 2A Module Intelligence Artificielle
40
Chapitre III : Les Systèmes experts
Programmation fonctionnelle : Langage Lisp Variables et fonctions Fonctions anonymes Forme spéciale lambda Syntaxe : (lambda (p1 p2 … pn) expr1 expr2 … exprn) Intérêt : Définir des fonctions locales temporaires qui sont souvent utilisées avec les fonctions d’application (fonctions qui prennent une fonction en argument et qui appliquent cette fonction à d ’autres arguments) Exemples tajouter une dipao pour quote, eval et type-of > (define carre (lambda (x) (* x x))) >((lambda (x y) (+ (* x x) (* y y))) 4 5) 41 EPSI/Montpellier Cycle CSII 2A Module Intelligence Artificielle
41
Chapitre III : Les Systèmes experts
Programmation fonctionnelle : Langage Lisp Variables et fonctions Fonctions d’application Primitive apply Syntaxe : (apply expr1 expr2) avec expr1 : une fonction F à n arguments et expr2 une liste ayant n éléments : (a1 a2 … an) Evaluation : Renvoie la valeur retournée par la fonction F quand on l ’appelle avec les arguments a1 a2 … an Exemples tajouter une dipao pour quote, eval et type-of > (apply carre ’(5)) 25 EPSI/Montpellier Cycle CSII 2A Module Intelligence Artificielle
42
Chapitre III : Les Systèmes experts
Programmation fonctionnelle : Langage Lisp Variables et fonctions Fonctions d’application Primitive map Syntaxe : (map expr0 expr1 expr2 … exprn) avec expr0 : une fonction F à n arguments et expr1 … exprn des listes ayant n éléments : (v11 v12 … v1n), (v21 v22 … v2n) … (vn1 vn2 … vnn) Evaluation : Renvoie la liste : ( F(v11 v21 … vn1) F(v12 v22 … vn2) … F(v1n v2n … vnn) ) Exemples tajouter une dipao pour quote, eval et type-of > (map carre ’( )) ( ) > (map * ’(2 4 8) ’( )) ( ) EPSI/Montpellier Cycle CSII 2A Module Intelligence Artificielle
43
Chapitre III : Les Systèmes experts
Programmation fonctionnelle : Langage Lisp Prédicats et structures de contrôle Notion de prédicat une fonction qui retourne la valeur « vrai » : #t ou « faux » : #f une fonction qui est utilisée dans les structures de contrôle Prédicats de type (null? expr) la valeur de expr est la liste vide ? (symbol? expr) la valeur de expr est un identificateur ? (number? expr) la valeur de expr est un nombre ? (string? expr) la valeur de expr est une chaîne de caractères ? (list? expr) la valeur de expr est une liste ? ... tajouter une dipao pour quote, eval et type-of EPSI/Montpellier Cycle CSII 2A Module Intelligence Artificielle
44
Chapitre III : Les Systèmes experts
Programmation fonctionnelle : Langage Lisp Prédicats et structures de contrôle Prédicats numériques (zero? expr) la valeur de expr est nulle ? (even? expr) la valeur de expr est paire ? (odd? expr) la valeur de expr est impaire ? (= expr1 expr2) la valeur de expr1 est égale à celle de expr2 ? (< expr1 expr2) la valeur de expr1 est inférieure à celle de expr2 ? (<= expr1 expr2) la valeur de expr1 est inférieure ou égale à celle de expr2 ? ... tajouter une dipao pour quote, eval et type-of EPSI/Montpellier Cycle CSII 2A Module Intelligence Artificielle
45
Chapitre III : Les Systèmes experts
Programmation fonctionnelle : Langage Lisp Prédicats et structures de contrôle Prédicats d’égalité = pour les nombres char=? pour les caractères string=? pour les chaînes de caractères equal? pour les atomes et les listes … Exemples > (equal? ’(a b c) ’(a b c)) #t > (equal? ’a ’a) > (equal? ’(a b) ’ ((a) (b))) #f > (equal? ’(a b) ’(a b c)) tajouter une dipao pour quote, eval et type-of EPSI/Montpellier Cycle CSII 2A Module Intelligence Artificielle
46
Chapitre III : Les Systèmes experts
Programmation fonctionnelle : Langage Lisp Prédicats et structures de contrôle Structures de contrôle Structure if Syntaxe : (if predicat expr1 expr2) Evaluation : Renvoie la valeur de expr1 si predicat est vrai ou la valeur de expr2 sinon Exemple > (define x -5) > (if (>= x 0) x (- x)) 5 tajouter une dipao pour quote, eval et type-of EPSI/Montpellier Cycle CSII 2A Module Intelligence Artificielle
47
Chapitre III : Les Systèmes experts
Programmation fonctionnelle : Langage Lisp Prédicats et structures de contrôle Structures de contrôle Structure cond Syntaxe : (cond (predicat1 expr11 expr12 … expr1n) (predicat2 expr21 expr22 … expr2n) … (predicatn exprn1 expn2 … exprnn) (else expr1 expr2 … exprn) ) Evaluation : - Les prédicats sont évalués un à un jusqu ’à obtention d’une valeur « vrai » - Les expressions correspondants sont alors évaluées et la valeur de la dernière expression est renvoyée - Si tous les prédicats renvoient « faux », la liste d ’actions correspondants à else est exécutée Exemple tajouter une dipao pour quote, eval et type-of EPSI/Montpellier Cycle CSII 2A Module Intelligence Artificielle
48
Chapitre III : Les Systèmes experts
Programmation fonctionnelle : Langage Lisp Prédicats et structures de contrôle Structures de contrôle Structure cond Exemple > (define (examiner a) (cond ((< a 100) (display "trop petit")) ((> a 1000) (display "trop grand")) ((= a 0) (display "nulle")) (else (display "rien à dire")))) > (examiner 5) trop petit > (examiner 200) rien à dire tajouter une dipao pour quote, eval et type-of EPSI/Montpellier Cycle CSII 2A Module Intelligence Artificielle
49
Chapitre III : Les Systèmes experts
Programmation fonctionnelle : Langage Lisp Prédicats et structures de contrôle Opérateurs logiques Opérateur and Syntaxe : (and pr1 pr2 … prn) Evaluation : - Les prédicats sont évaluées de gauche à droite - On s ’arrête dès qu ’une évaluation produit un #f - Renvoie la valeur #f ou la valeur #t tajouter une dipao pour quote, eval et type-of EPSI/Montpellier Cycle CSII 2A Module Intelligence Artificielle
50
Chapitre III : Les Systèmes experts
Programmation fonctionnelle : Langage Lisp Prédicats et structures de contrôle Opérateurs logiques Opérateur or Syntaxe : (or pr1 pr2 … prn) Evaluation : - Les prédicats sont évaluées de gauche à droite - On s ’arrête dès qu ’une évaluation produit la valeur #t - Renvoie la valeur #f ou la valeur #t tajouter une dipao pour quote, eval et type-of EPSI/Montpellier Cycle CSII 2A Module Intelligence Artificielle
51
Chapitre III : Les Systèmes experts
Programmation fonctionnelle : Langage Lisp Prédicats et structures de contrôle Opérateurs logiques Opérateur not Syntaxe : (not expression) Evaluation : Renvoie #t si la valeur de expression = #f et vice-versa tajouter une dipao pour quote, eval et type-of EPSI/Montpellier Cycle CSII 2A Module Intelligence Artificielle
52
Chapitre III : Les Systèmes experts
Programmation fonctionnelle : Langage Lisp Les entrées/sorties Primitives de lecture Primitive read Syntaxe : (read [port]) Action : Lit des données depuis le port d’entrée port Exemple > (define (euro-franc) (let ((mf (begin (display "entrez le montant en euro : ")(read)))) (display "voici l'équivalent eu franc : ") (print (* mf))) ) tajouter une dipao pour quote, eval et type-of EPSI/Montpellier Cycle CSII 2A Module Intelligence Artificielle
53
Chapitre III : Les Systèmes experts
Programmation fonctionnelle : Langage Lisp Les entrées/sorties Primitives de lecture Primitive read-char Syntaxe : (read-char [port]) Action : Lit le caractère suivant depuis le port d’entrée port Exemple > ((define (voyelle?) (let ((lettre (begin (display "entrez une lettre : ") (read-char) ) )) (cond ((char=? lettre #\a) (display "voyelle")) ((char=? lettre #\e) (display "voyelle")) ;... (else (display "consonne")) tajouter une dipao pour quote, eval et type-of EPSI/Montpellier Cycle CSII 2A Module Intelligence Artificielle
54
Chapitre III : Les Systèmes experts
Programmation fonctionnelle : Langage Lisp Les entrées/sorties Primitives de lecture Primitive read-line Syntaxe : (read-line [port]) Action : Lit la ligne suivante suivante depuis le port d’entrée port Exemple >(define (concat) (let ((ph1 (begin (display "entrez une première phrase : ") (read-line) ) (ph2 (begin (display "entrez une deuxième phrase : ") (display "résulat de la concaténation de ces eux phrases : ") (display (string-append ph1 " " ph2)) tajouter une dipao pour quote, eval et type-of EPSI/Montpellier Cycle CSII 2A Module Intelligence Artificielle
55
Chapitre III : Les Systèmes experts
Programmation fonctionnelle : Langage Lisp Les entrées/sorties Primitives d’écriture Primitives write, print Syntaxe : (write expression [port]) (print expression [port]) Action : Renvoient la valeur de expression sur le port de sortie port Exemple tajouter une dipao pour quote, eval et type-of > (write "bonjour") "bonjour" > (print "bonjour") > (write (/ 12 3)) 4 EPSI/Montpellier Cycle CSII 2A Module Intelligence Artificielle
56
Chapitre III : Les Systèmes experts
Programmation fonctionnelle : Langage Lisp Les entrées/sorties Primitives d’écriture Primitive display Syntaxe : (display expression [port]) Action : Renvoie la valeur de expression sur le port de sortie port Exemple > (display "bonjour") bonjour > (display (+ 5 8)) 13 tajouter une dipao pour quote, eval et type-of EPSI/Montpellier Cycle CSII 2A Module Intelligence Artificielle
57
Chapitre III : Les Systèmes experts
Programmation fonctionnelle : Langage Lisp Les entrées/sorties Primitives d’écriture Primitive newline Syntaxe : (newline [port]) Action : Aller à la ligne dans le port de sortie port Exemple > (define port (open-output-file "texte.wri")) > (newline port) > (close-output-port port) tajouter une dipao pour quote, eval et type-of EPSI/Montpellier Cycle CSII 2A Module Intelligence Artificielle
58
Chapitre III : Les Systèmes experts
Programmation fonctionnelle : Langage Lisp Les fichiers Ouverture en lecture Primitive open-input-file Syntaxe : (open-input-file "nom-fichier") Action : Renvoie le port d’entrée créé par l’ouverture du fichier "nom-de-fichier" Exemple > (define port (open-input-file "texte.wri")) tajouter une dipao pour quote, eval et type-of EPSI/Montpellier Cycle CSII 2A Module Intelligence Artificielle
59
Chapitre III : Les Systèmes experts
Programmation fonctionnelle : Langage Lisp Les fichiers Ouverture en écriture Primitive open-output-file Syntaxe : (open-output-file "nom-fichier" [arg]) Action : Renvoie le port de sortie créé par l’ouverture du fichier "nom-de-fichier" arg peut prendre les valeurs : ’error, ’replace, ’truncate, ’append Exemple tajouter une dipao pour quote, eval et type-of > (define port (open-output-file "texte.wri" ’replace)) EPSI/Montpellier Cycle CSII 2A Module Intelligence Artificielle
60
Chapitre III : Les Systèmes experts
Programmation fonctionnelle : Langage Lisp Les fichiers Fermeture en lecture Primitive close-input-port Syntaxe : (close-input-port port) Action : Ferme le port d’entrée port Exemple tajouter une dipao pour quote, eval et type-of > (define port (open-input-file "texte.wri")) > (close-input-port port) EPSI/Montpellier Cycle CSII 2A Module Intelligence Artificielle
61
Chapitre III : Les Systèmes experts
Programmation fonctionnelle : Langage Lisp Les fichiers Fermeture en écriture Primitive close-output-port Syntaxe : (close-output-port port) Action : Ferme le port de sortie port Exemple tajouter une dipao pour quote, eval et type-of > (define port (open-output-file "texte.wri")) > (close-output-port port) EPSI/Montpellier Cycle CSII 2A Module Intelligence Artificielle
62
Chapitre III : Les Systèmes experts
Programmation fonctionnelle : Langage Lisp Les fichiers Fin de fichier Prédicat eof-object? Syntaxe : (eof-object? expresssion) Action : Renvoie la valeur #t si expression est une fin de fichier Exemple tajouter une dipao pour quote, eval et type-of > (do ((ligne (read-line port) (read-line port))) ((eof-object? ligne)) (display ligne) (newline) ) EPSI/Montpellier Cycle CSII 2A Module Intelligence Artificielle
63
Chapitre III : Les Systèmes experts
Programmation fonctionnelle : Langage Lisp Les fichiers Ecriture dans un fichier séquentiel Exemple > ((define (ecriture-fichier) (let ((port (open-output-file "toto.wri" ’replace))) (begin (display "Ecriture dans un fichier") (display "MATIERE : " port) (display "Intelligence Artificielle" port) (newline port) (display "PUBLIC : " port) (display "CS " port) (display (+ 1 1) port) (display "A" port) (display "ANNEE : " port) (display " " port) (display "ETABLISSEMENT : " port) (display "EPSI" port) (close-output-port port) ) tajouter une dipao pour quote, eval et type-of EPSI/Montpellier Cycle CSII 2A Module Intelligence Artificielle
64
Chapitre III : Les Systèmes experts
Programmation fonctionnelle : Langage Lisp Les fichiers Lecture d’un fichier séquentiel Exemple > (define lecture-fichier (lambda(nom-fichier) (let ((port (open-input-file nom-fichier))) (begin (do ((ligne (read-line port) (read-line port))) ((eof-object? ligne)) (display ligne) (newline) ) (close-input-port port) tajouter une dipao pour quote, eval et type-of EPSI/Montpellier Cycle CSII 2A Module Intelligence Artificielle
Présentations similaires
© 2024 SlidePlayer.fr Inc.
All rights reserved.