La présentation est en train de télécharger. S'il vous plaît, attendez

La présentation est en train de télécharger. S'il vous plaît, attendez

Chapitre IV Programmation fonctionnelle : Langage Lisp EPSI / Montpellier - Cycle CSII 2A Intelligence Artificielle.

Présentations similaires


Présentation au sujet: "Chapitre IV Programmation fonctionnelle : Langage Lisp EPSI / Montpellier - Cycle CSII 2A Intelligence Artificielle."— Transcription de la présentation:

1 Chapitre IV Programmation fonctionnelle : Langage Lisp EPSI / Montpellier - Cycle CSII 2A Intelligence Artificielle

2 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 Programmation fonctionnelle : Langage Lisp

3 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 Programmation fonctionnelle : Langage Lisp

4 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 Programmation fonctionnelle : Langage Lisp

5 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) read eval print Lecture d ’une expression symbolique (une s-expression) Évaluation de l ’expression Écriture du résultat (une s-expression)

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 Les dialectes de Lisp –Le_Lisp –Mac Lisp –Frantz Lisp –Koyoto Common Lisp –Scheme –etc. Programmation fonctionnelle : Langage Lisp

9 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 (U niversité 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) Programmation fonctionnelle : Langage Lisp

10 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 varibalesne sont pas des variables y485 forte_fievre"votre nom ?" *regles*(x) _osun 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 #\Aatome de type caractèreconstante 100atome de type entier 7/8atome de type rationnelconstante #tatome TRUEconstante #f atome FALSEconstante NULL atome NULLconstante "lisp"atome de type chaîne de caractères constante epsiatome de type variablevariable (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 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 > > « quel est votre nom ? » « quel est votre nom ? » > (define annee-courante 2002) > annee-courante 2002 > mois > erreur : reference to undefined identifier: mois

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 v i est est le résultat de l ’évaluation de expr i Alors v 0 doit être une fonction étape 2 : application de v 0 aux arguments v 1 … v n  une erreur survient si  v 0 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)) Evaluation de 3 3 => Evaluation de (sqrt 2) Evaluation de 2 2 => Evaluation de (* 2 3 4) Evaluation de 2 2 => Evaluation de 3 3 => Evaluation de 4 4 => x3x4 => => => 1.414

22 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

23 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) > (quote (a b c)) (a b c) > ' (a b c) (a b c)

24 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 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)

25 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.. CARCDR queue tête (car.cdr) Paire pointée

26 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.())))

27 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 ; given 18 > (car ' (+ 7 11)) + > (car ' (())) () > (car ' (paul. pierre)) paul > (car ' (paul pierre)) > (car ' ((paul pierre) michel maurice)) (paul pierre)

28 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 ; given 18 > (cdr ' ( )) (2 3 4) > (cdr ' (+ 1 2)) (1 2) > (cdr ' (a (b c))) ((b c)) > (car (cdr ' (a (b c)))) (b c)

29 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 > (cdadr ' (a (b c) d)) (c) > (caadr ' (a (b c) d)) b > (cdddr ' (a (b c) d)) () > (cadar ' (a (b c) d)) erreur

30 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))) (a b c d)

31 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 > (list 'a ’b ’c) (a b c) >(list (+1 3) ’paul (car ’ (a b)) (symbol? ’paul)) (4 paul a #t) > (list (list ’ ())) ((()))

32 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 > (append ’(a b) (’c ’d)) (a b c d) >(append ’a ’(2 3)) erreur : append: expects argument of type ; given a > (append ’(x y) ’z) (x y. z)

33 Programmation fonctionnelle : Langage Lisp Manipulation des listes –Fonctions de traitement  Fonction length  Syntaxe : (length liste)  Evaluation : Renvoie la longueur d’une liste  Exemples > (length ’(a b c)) 3 >(length ’()) 0 > (length ’(a (b) (c d e))) 3

34 Programmation fonctionnelle : Langage Lisp Manipulation des listes –Fonctions de traitement  Fonction reverse  Syntaxe : (reverse liste)  Evaluation : Renvoie l’inverse d’une liste  Exemples > (reverse ’(a b c)) (c b a) > (reverse ’(a (b) (c d e))) ((c d e) (b) a)

35 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 > (define x (+ 2 3)) > x 5 > (define base-de-regles ())

36 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)) > a (b c)

37 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 > (let ((a 12) (b 5)) (* a b)) 60

38 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 > (define (carre x) (* x x))

39 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 > (carre (+ 2 3)) 25 > (define (trois) 3) > (trois) 3

40 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 > (define carre (lambda (x) (* x x))) >((lambda (x y) (+ (* x x) (* y y))) 4 5) 41

41 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 > (apply carre ’(5)) 25

42 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 > (map carre ’( )) ( ) > (map * ’(2 4 8) ’( )) ( )

43 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 ? –...

44 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 ? –...

45 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) #t > (equal? ’(a b) ’ ((a) (b))) #f > (equal? ’(a b) ’(a b c)) #f

46 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

47 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

48 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

49 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

50 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

51 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

52 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))) )

53 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")) )

54 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 : ") (read-line) ) (display "résulat de la concaténation de ces eux phrases : ") (display (string-append ph1 " " ph2)) )

55 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 > (write "bonjour") "bonjour" > (print "bonjour") "bonjour" > (write (/ 12 3)) 4

56 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

57 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)

58 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"))

59 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 > (define port (open-output-file "texte.wri" ’replace))

60 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 > (define port (open-input-file "texte.wri")) > (close-input-port port)

61 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 > (define port (open-output-file "texte.wri")) > (close-output-port port)

62 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 > (do ((ligne (read-line port) (read-line port))) ((eof-object? ligne)) (display ligne) (newline) )

63 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) (newline port) (display "ANNEE : " port) (display " " port) (newline port) (display "ETABLISSEMENT : " port) (display "EPSI" port) (newline port) (close-output-port port) )

64 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) )


Télécharger ppt "Chapitre IV Programmation fonctionnelle : Langage Lisp EPSI / Montpellier - Cycle CSII 2A Intelligence Artificielle."

Présentations similaires


Annonces Google