Your SlideShare is downloading. ×
Le langage Lisp
Le langage Lisp
Le langage Lisp
Le langage Lisp
Le langage Lisp
Le langage Lisp
Le langage Lisp
Le langage Lisp
Le langage Lisp
Le langage Lisp
Le langage Lisp
Le langage Lisp
Le langage Lisp
Le langage Lisp
Le langage Lisp
Le langage Lisp
Le langage Lisp
Le langage Lisp
Le langage Lisp
Le langage Lisp
Le langage Lisp
Le langage Lisp
Le langage Lisp
Le langage Lisp
Le langage Lisp
Le langage Lisp
Le langage Lisp
Le langage Lisp
Le langage Lisp
Le langage Lisp
Le langage Lisp
Le langage Lisp
Le langage Lisp
Le langage Lisp
Le langage Lisp
Le langage Lisp
Le langage Lisp
Le langage Lisp
Le langage Lisp
Le langage Lisp
Upcoming SlideShare
Loading in...5
×

Thanks for flagging this SlideShare!

Oops! An error has occurred.

×
Saving this for later? Get the SlideShare app to save on your phone or tablet. Read anywhere, anytime – even offline.
Text the download link to your phone
Standard text messaging rates apply

Le langage Lisp

998

Published on

Published in: Technology
0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total Views
998
On Slideshare
0
From Embeds
0
Number of Embeds
1
Actions
Shares
0
Downloads
41
Comments
0
Likes
0
Embeds 0
No embeds

Report content
Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
No notes for slide

Transcript

  • 1. Bruno Delb http://www.brunodelb.com Date : 12/02/2001 Le langage Lisp SommaireDÉFINITIONS..........................................................................................................5 QU’EST-CE QU’UN ATOME ?............................................................................................5 QU’EST-CE QU’UNE LISTE ?............................................................................................5 QU’EST-CE QU’UN ENVIRONNEMENT ?................................................................................5 QU’EST-CE QU’UNE EXPRESSION ?....................................................................................5 QU’EST-CE QU’UN PROGRAMME ?......................................................................................5 QU’EST-CE QUE NIL ?..................................................................................................5 QU’EST-CE QU’UN CARACTÈRE SPÉCIAL ?............................................................................6 QU’EST-CE QU’UNE A-LISTE ?.........................................................................................6L’ÉVALUATION .......................................................................................................7 QUEL EST LE MÉCANISME ?.............................................................................................7 QU’EST-CE QU’UNE S-EXPRESSION ?.................................................................................7 QU’EST-CE QUE LE SYMBOLE [SETQ] ?.............................................................................7 QU’EST-CE QU’UN NOMBRE ?..........................................................................................7 QU’EST-CE QU’UNE CHAÎNE ?..........................................................................................7 QU’EST-CE QU’UNE LISTE ?............................................................................................8 QU’EST-CE QU’UNE FORME EXPR ?...................................................................................8LES COMMANDES.....................................................................................................9 DÉFINITION D’UNE COMMANDE [DE].................................................................................9 GESTION D’UNE LISTE...................................................................................................9 Premier élément [CAR].........................................................................................9 Tout sauf premier élément [CDR]..........................................................................9 AFFECTATION C-VAL [SETQ].......................................................................................10 RETOUR F-VAL [VALFN]............................................................................................10 SI ... ALORS ... SINON [IF]........................................................................................10 OPÉRATION ARITHMÉTIQUE...........................................................................................10 +......................................................................................................................10 -.......................................................................................................................10 - (opposé).........................................................................................................11 /.......................................................................................................................11 Exemple [+/*]...................................................................................................11 >/</=>/=</<>/=.............................................................................................11 ET LOGIQUE [AND]...................................................................................................11 CONCATÉNATION [APPEND]........................................................................................12 ASSOCIATION [ASSOC].............................................................................................12 TESTE ATOME [ATOME].............................................................................................12 PREMIER ARGUMENT [CAR]..........................................................................................12 TOUT SAUF LE PREMIER ARGUMENT [CDR]........................................................................13 SI ... ALORS [COND]................................................................................................13 CONCATÉNATION [CONS]............................................................................................13 TESTE SI LISTE LISTE VIDE [CONSP]..............................................................................13 DÉFINITION DE FONCTION [DE].....................................................................................14 DIFFÉRENCE [DIFFERENCE].......................................................................................14 EGALITÉ [EQ]..........................................................................................................15 EGALITÉ (PRÉDICAT) [EQN].........................................................................................15 SEMBLABLE (PRÉDICAT) [EQUAL].................................................................................15 VALEUR [EVAL].......................................................................................................15 1
  • 2. Bruno Delb http://www.brunodelb.com Date : 12/02/2001 Le langage Lisp EXPOSANT [EXP]......................................................................................................16 CONVERSION MONO-CARACTÈRES [EXPLODECH]...............................................................16 BOOLÉEN FAUX [FALSE].............................................................................................16 DÉFINITION DE FONCTION [FLAMBDA]............................................................................16 TEST SI FONCTION [FUNCTIONP].................................................................................16 LISTE - LECTURE DE P-LISTE........................................................................................17 > [GREATERP]......................................................................................................17 SI ... ALORS ... SINON [IF]........................................................................................17 SI NON ... ALORS ... SINON [IFN]................................................................................18 DÉFINITION DE FONCTION [LAMBDA].............................................................................18 NOMBRE DE TERMES [LENGTH]....................................................................................18 EVALUATION [LET]....................................................................................................19 LISTE [LIST]...........................................................................................................19 TESTE SI ATOME APPARTIENT À LA LISTE [MEMBER]...........................................................19 LISTE POINTÉE [MCONS]............................................................................................19 DÉFINITION DEXPRESSION [MLAMBDA]..........................................................................19 DÉFINITION DEXPRESSION [NLAMBDA]..........................................................................20 TESTE SI NIL [NOT].................................................................................................20 TESTE SI VIDE [NULL]...............................................................................................20 TESTE SI NOMBRE [NUMBERP]....................................................................................20 OU LOGIQUE [OR]....................................................................................................21 TESTE SI NON VIDE [PAIRP]........................................................................................21 + [PLUS]..............................................................................................................21 AFFICHAGE SANS SAUT À LA LIGNE [PRIN/PRIN1].............................................................21 AFFICHAGE AVEC SAUT À LA LIGNE [PRINT]......................................................................22 EVALUATION TOUR À TOUR [PROGN]..............................................................................22 ECRITURE EN P-LISTE [PUT]........................................................................................22 PARAMÈTRE DAPPEL [QUOTE]......................................................................................23 DIVISION [QUOTIENT].............................................................................................23 LECTURE AU CLAVIER [READ].......................................................................................23 RESTE [REMAINDER]...............................................................................................24 LISTE INVERSÉE [REVERSE]........................................................................................24 POINTEUR [RPLACE].................................................................................................24 POINTEUR [RPLACD].................................................................................................24 AFFECTATION [SET]..................................................................................................25 AFFECTATION (AUTRE) [SETQ].....................................................................................25 RACINE CARRÉE [SQRT].............................................................................................25 REMPLACEMENT DATOME [SUBST]................................................................................25 TESTE SI SYMBOLE [SYMBOLP]....................................................................................25 SAUT À LA LIGNE [TERPRI].........................................................................................25 MULTIPLICATION [TIMES]...........................................................................................26 VRAI [TRUE]..........................................................................................................26 ECRITURE................................................................................................................26 Noms des variables............................................................................................26 Cascade daccesseurs.........................................................................................26 Ordres de test....................................................................................................26 Séparation des pouvoirs......................................................................................26 Proscription des effets de bord.............................................................................26 Conditionnelle....................................................................................................26 Economie..........................................................................................................27UN LANGAGE : LELISP...........................................................................................29 COMMENT LANCER LELISP ?..........................................................................................29 COMMENT SAUVEGARDER DES FONCTIONS DÉFINIES ?...........................................................29 COMMENT ANNULER LA DERNIÈRE COMMANDE ?...................................................................29 COMMENT CHARGER UN FICHIER ?...................................................................................29 QUELS SONT LES OUTILS DE MISE AU POINT ?....................................................................29 2
  • 3. Bruno Delb http://www.brunodelb.com Date : 12/02/2001 Le langage Lisp Comment activer la trace ?.................................................................................29 Comment désactiver la trace ?.............................................................................29 Comment sélectionner un disque ou retourner la valeur du disque ?........................30LA COMPARAISON PASCAL / LISP........................................................................31 FACTORIELLES..........................................................................................................31LA COMPARAISON PROLOG / PASCAL...................................................................33 QUELLES SONT LES CARACTÉRISTIQUES DE PROLOG ?...........................................................33 QUELLES SONT LES CARACTÉRISTIQUES DE PASCAL ?............................................................33 QUELS SONT LES POINTS COMMUNS ENTRE PROLOG ET LISP ?.................................................33 QUELLES SONT LES DIFFÉRENCES ENTRE PROLOG ET LISP ?....................................................33LES MÉCANISMES DÉVALUATION.........................................................................35 COMMENT EST ÉVALUÉE UNE S-EXPRESSION ?....................................................................35 COMMENT EST ÉVALUÉ UN SYMBOLE ?..............................................................................35 COMMENT EST ÉVALUÉ UN NOMBRE ?...............................................................................35 COMMENT EST ÉVALUÉE UNE CHAÎNE ?.............................................................................35 COMMENT EST ÉVALUÉE UNE LISTE ?................................................................................35LES FONCTIONS....................................................................................................36 COMMENT DÉFINIR UNE FONCTION ?................................................................................36 (CAR argument) ................................................................................................36 (CDR argument) ................................................................................................36 (SETQ <argument1> <argument2>) ...................................................................36 (VALFN <symbole>)...........................................................................................36 (IF <test><expr si vrai><expr si faux1>...<expr si faux2>) .................................37 QUELLES SONT LES AUTRES FONCTIONS ?.........................................................................37 QUELS SONT LES CONTRÔLES POSSIBLES ?........................................................................37 (PROGN formes ...) ............................................................................................37 (IF si alors sinon ...)...........................................................................................37 (IFN si alors sinon ...) ........................................................................................37 COMMENT MANIPULER LES LISTES ?.................................................................................38 (CAR liste-non-vide) ..........................................................................................38 (CDR liste-non-vide) ..........................................................................................38 (CONS expression liste-quelconque) ....................................................................38 (LIST expressions) ............................................................................................38 COMMENT MANIPULER LES PRÉDICATS ?............................................................................38 (ATOM expression).............................................................................................38 (NUMBERP expression) ......................................................................................38 (SYMBOLP expression) .......................................................................................38 (CONSP expression) ..........................................................................................38 (EQ symbole1 symbole2) ...................................................................................38 (EQN nombre1 nombre2)....................................................................................38 (EQUAL expression1 expression2)........................................................................39 (NULL expression)..............................................................................................39 (EVAL forme) ....................................................................................................39 (QUOTE expression) ..........................................................................................39 COMMENT DÉFINIR DES FONCTIONS ?...............................................................................39 (DE nom (variables) formes)...............................................................................39 (DE nom variable formes) ..................................................................................39 (DM / (LAMBDA (variables) formes)......................................................................39 (LAMBDA variable formes) ..................................................................................39 COMMENT MANIPULER LES PROPRIÉTÉS ?...........................................................................40 (SET symbole expression) ..................................................................................40 (SETQ symbole expression).................................................................................40 (PUTPROP symbole valeur clé) ............................................................................40 3
  • 4. Bruno Delb http://www.brunodelb.com Date : 12/02/2001 Le langage Lisp (GETPROP symbole clé)......................................................................................40COMMENT EFFECTUER DES ENTRÉES ET DES SORTIES ?..........................................................40 (READ) .............................................................................................................40 (PRIN expressions) ............................................................................................40 (TERPRI) ..........................................................................................................40 (PRINT expressions)...........................................................................................41COMMENT FAIRE DE LA CHIRURGIE ?................................................................................41 (RPLACA liste-non-vide expression) .....................................................................41 (RPLACD liste-non-vide expression) .....................................................................41COMMENT FAIRE DES CONVERSIONS ?..............................................................................41 (EXPLODECH atome)..........................................................................................41 (IMPLODECH liste-de-caractères).........................................................................41 (FUNCTIONP fonction) .......................................................................................41 (GETDEF symbole) ............................................................................................41COMMENT FAIRE DE L’ARITHMÉTIQUE ÉLÉMENTAIRE ?.............................................................41 (+ nombres) ou (* nombres) ..............................................................................41 (- nombre) .......................................................................................................42 (- nombres).......................................................................................................42 (/ nombres) ou ( nombres) ...............................................................................42 (> nombres) ou (=< nombres) ou ... = ou >= ou >...............................................42COMMENT UTILISER LES FONCTIONS BOOLÉENNES ?..............................................................42 (AND expressions)..............................................................................................42 (FALSE expression) ...........................................................................................42 (OR expressions) ...............................................................................................43 (NOT expression) ..............................................................................................43 (TRUE expression)..............................................................................................43COMMENT FAIRE LE RESTE ?..........................................................................................43 (LET (liaisons) formes)........................................................................................43 (MCONS expression1 expression2 expressions).....................................................43 (COND (si1 alors1 ...) (si2 alors2 ...) ...) ..............................................................43 4
  • 5. Bruno Delb http://www.brunodelb.com Date : 12/02/2001 Le langage LispDéfinitions Qu’est-ce qu’un atome ? Cest une chaîne de caractères contigus. Exemples : « UNE », « BLANC ». Qu’est-ce qu’une liste ? Une liste comprend : • une parenthèse ouvrante : ( • des objets séparés par un ou plusieurs blancs • une parenthèse fermante : ) Exemple : « (ABC2DEF) ». () est la liste vide. Attention : (()) est une liste non vide. De plus, la liste vide () est identifiée à latome NIL. Qu’est-ce qu’un environnement ? Un environnement est une structure de donnée qui associe chaque variable à sa valeur. Exemple : « N - 4 ». Qu’est-ce qu’une expression ? SEXP = Liste U Atome = Symbolic EXPression Qu’est-ce qu’un programme ? Un programme Lisp est représenté par des listes. Qu’est-ce que NIL ? Les valeurs logiques Vrai et Faux sont représentées par T et NIL. 5
  • 6. Bruno Delb http://www.brunodelb.com Date : 12/02/2001 Le langage Lisp De plus, la liste vide () est identifiée à latome NIL.Qu’est-ce qu’un caractère spécial ? Pour afficher les caractères spéciaux, les précéder du caractère "$" (ou parfois "/" ou "!"). Exemple : ?(ATOM (PRINT $(FAUSSE-LISTE$))) (FAUSSE-LISTE) TQu’est-ce qu’une A-Liste ? A-LISTE est une liste dassociations : = ((indicateur1 valeurs1 ...) (indicateur2 valeurs2 ...) ... (indicateurn valeursn ...) ) Exemple : Lenvironnement (variable, valeur). 6
  • 7. Bruno Delb http://www.brunodelb.com Date : 12/02/2001 Le langage LispL’évaluation Quel est le mécanisme ? Lorsque lon soumet une s-expression à linterpréteur, il lévalue immédiatement affiche le résultat. Qu’est-ce qu’une S-Expression ? Une s-expression est une expression qui respecte la syntaxe Lisp. Qu’est-ce que le symbole [SETQ] ? Il renvoit ce que contient la C-VAL du symbole. SETQ est une fonction qui permet de placer une valeur dans la C-VAL dun symbole. Exemple : ? facile = *** erreur: facile variable indéfinie. *** ? (SETQ facile 2) =2 ? facile =2 Qu’est-ce qu’un nombre ? Lorsque lon soumet un nombre à lévaluateur, il renvoit ce nombre. Exemple : ? 8730 = 8730 Qu’est-ce qu’une chaîne ? Cest la chaîne elle-même. Exemple : ? "BONJOUR" = "BONJOUR" 7
  • 8. Bruno Delb http://www.brunodelb.com Date : 12/02/2001 Le langage LispQu’est-ce qu’une liste ? Lorsque lon soumet une liste à lévaluateur, il considère quil sagit dun appel de fonction. Il faut donc que le premier élément de la liste soit un symbole correspondant à une fonction. Exemple : ? (- 4 3) =1 ? (1 2) = *** erreur: 1 fonction indéfinie ***Qu’est-ce qu’une forme EXPR ? Exemple : évaluation de (LE N 1) avec : (DE LE (P N) (NOT (GT P N)) ) 1°) Le premier terme est une fonction, donc cest une EXPR. 2°) On évalue les autres arguments : N = 4 (dans lenvironnement) et 1 3°) Liaison des variables (paramètres) et des arguments. P-4 N-1 V N-4 V (global) 4°) Evaluation de la fonction : (NOT (GT P N)) avec P = 4 et N = 1 5°) Retour de la valeur et restauration de lenvironnement initiale : N-4 8
  • 9. Bruno Delb http://www.brunodelb.com Date : 12/02/2001 Le langage LispLes commandes Définition d’une commande [DE] La fonction DE permet de définir de nouveaux symboles en tant que fonction. La F-VAL du symbole va donc être affectée. (DE <nom_de_la_fonction> <liste_des_paramètres> <corps_de_la_fonction> ) Exemple : ? (DE plus (x y ) (+ x y)) = plus ? (plus 3 5) =8 Gestion d’une liste Premier élément [CAR] (CAR argument) Renvoit le premier élément de la liste "argument". Tout sauf premier élément [CDR] (CDR argument) Renvoit la liste "argument" privée de son premier élément. Exemple : ? (CAR (1 2 3 4)) = *** erreur: 1 fonction indéfinie *** Il y a évaluation de la liste (1 2 3 4), mais 1 nest pas une fonction. On utilise "" (quote) pour empêcher lévaluation. ? (CAR (1 2 3 4)) =1 9
  • 10. Bruno Delb http://www.brunodelb.com Date : 12/02/2001 Le langage LispAffectation C-VAL [SETQ] (SETQ <argument1> <argument2>) Place dans la C-VAL de <argument1> le résultat de lévaluation de <argument2>. Exemple : ? (SETQ (x 4) =4Retour F-VAL [VALFN] (VALFN <symbole>) Retourne la F_VAL du symbole <symbole>. Exemple : ? (VALFN plus) = ((x y) (+ x y))Si ... Alors ... Sinon [IF] (IF <test> <expr0><expr1>...<exprn> ) Si lévaluation de "test" retourne vrai, alors il y a évaluation de <expr0>, sinon il y a évaluations successives de <expr1> à <exprn>. Exemple : ? (IF (= 3 4) 7 (SETQ x 2) (SETQ y 3) (* X Y)Opération arithmétique + (+ nombre1 ... nombren) ou (* nombre1 ... nombren) Retourne nombre1 + ... + nombren ou nombre1 * ... * nombren Retourne 0 (élément neutre) ou 1 (élément neutre) si pas de paramètre. - !TOPIC 38 LISPCOMMANDEARITHMETIQUE [-] (BIS) (- nombre1 ... nombren) Retourne nombre1 - (nombre2 + ... + nombren) 10
  • 11. Bruno Delb http://www.brunodelb.com Date : 12/02/2001 Le langage Lisp - (opposé) (- nombre) Retourne lopposé du nombre "nombre". / (/ nombre1 nombre2) ou ( nombre1 nombre2) Retourne nombre1 / nombre2 ou le reste de (nombre1 / nombre2) Exemple [+/*] (A * X ^2 + B * X + C)) <=> (+ (* A (^ X 2)) (+ (* B X) C)) >/</=>/=</<>/= (> nombres) ou (< nombres) ou (=> nombres) ou (=< nombres) ou (<> nombres) ou (= nombres) ou Retourne T si la comparaison est vraie, NIL sinon.Et logique [AND] (AND expressions) Evalue les expressions jusquà ce que lune delles valle NIL. Retourne la valeur pour laquelle NIL est obtenu, la valeur de la dernière expression sinon. Exemple : (AND) donne T (AND ()) donne () (AND 1 2 3 4) donne 4 (AND 11 2 () 4) donne () 11
  • 12. Bruno Delb http://www.brunodelb.com Date : 12/02/2001 Le langage LispConcaténation [APPEND] (APPEND expression1 ... expressionn) Concatène "expression1" ... "expressionn". Exemple : ?(APPEND (A (B)) ((C) D)) (A (B) (C) D) ?(DE APPEND (L1 L2) ? (IF PAIRP L1) ? (CONS (CAR L1) ? (APPEND (CDR L1) L2)) ? L2))Association [ASSOC] (ASSOC atome A-liste) Retourne le couple (indicateur2 valeurs) de la A-liste où "indicateur" = "indicateur2" Exemple : ?(DE ASSOC (I AL) ? (IF AL ? (IF (EQ (CAAR AL) I) ? (CAR AL) ? (ASSOC (CDR AL)))))Teste atome [ATOME] (ATOM expression) Retourne T si "expression" est un atome, NIL sinon. Exemple : ?(ATOM ATOM) T ?(ATOM NIL) T ?(ATOM (+ 1 2)) T ?(ATOM (LISTE NON VIDE)) NILPremier argument [CAR] (CAR liste-non-vide) Retourne le premier argument de la liste "liste-non-vide" Exemple : ?(CAR (VOICI UNE (LISTE)) VOICI 12
  • 13. Bruno Delb http://www.brunodelb.com Date : 12/02/2001 Le langage LispTout sauf le premier argument [CDR] (CDR liste-non-vide) Retourne la liste "liste-non-vide" sauf le premier terme Exemple : ?(CDR (LISTE NON VIDE)) (NON VIDE) ?(CDR (LISTE)) NILSi ... Alors [COND] (COND (si1 alors1 ...) (si2 alors2 ...) ...) Evalue tour à tour les conditions SI. Retourne la valeur de (PROGN ALORSi) si SIi vaut non-NIL, NIL sinon. Exemple : ?(COND () 1 2) (T 3 4 5)) 5 ?(DM COND (CALL) ? (IF (PAIRP (CDR CALL)) ? (LIST IF ? (CAADR CALL) ? (CONS PROGN (CDADR CALL)) ? (CONS COND (CDDR CALL)))))Concaténation [CONS] (CONS expression liste) Retourne la concaténation de "expression" et de la liste "liste" Exemple : ?(CONS LISTE NIL) (LISTE) ?(CONS (CONS A TOUJOURS POUR VALEUR) ? (UNE LISTE)) ((CONS A TOUJOURS POUR VALEUR) UNE LISTE)Teste si liste liste vide [CONSP] (CONSP expression) Retourne T si "expression" est une liste non vide, NIL sinon. 13
  • 14. Bruno Delb http://www.brunodelb.com Date : 12/02/2001 Le langage LispDéfinition de fonction [DE] (DE nom (variables) expressions) (DM nom (variables) expressions) (DF nom (variables) expressions) (DN nom (variables) expressions) Définit une fonction. Pour les opérateurs de définition, voir LAMBDA, MLAMBDA, FLAMBDA, NLAMBDA. Exemple : ?(PROGN (SET DF (FLAMBDA (ARGS) ? (SET (CAR ARGS) ? (EVAL (CONS FLAMBDA (CDR ARGS)))) ? (CAR ARGS))) ? ; Puisque DF est définie, on peut lutiliser ? (DF DE (ARGS) ? (SET (CAR ARGS) ? (EVAL (CONS LAMBDA (CDR ARGS)))) ? (CAR ARGS)) ? (DF DN (ARGS) ? (SET (CAR ARGS) ? (EVAL (CONS NLAMBDA (CDR ARGS)))) ? (CAR ARGS)) ? (DF DM (ARGS) ? (SET (CAR ARGS) ? (EVAL (CONS MLAMBDA (CDR ARGS)))) ? (CAR ARGS))) DMDifférence [DIFFERENCE] (DIFFERENCE nombre1 nombre2) = nombre1 - nombre2 Exemple : ?(DIFFERENCE 1968 (ADD1 1066)) 901 14
  • 15. Bruno Delb http://www.brunodelb.com Date : 12/02/2001 Le langage LispEgalité [EQ] (EQ symbole1 symbole2) Retourne T si "symbole1" = "symbole2, NIL sinon Exemple : ?(EQ ATOM LIST) NIL ?(EQ ATOM (CAR (ATOM ATOM))) T ?(EQ (+ 1 2) (- 4 1)) T ?(EQ ATOM ATOM) TEgalité (Prédicat) [EQN] (EQN nombre1 nombre2) Retourne T si "nombre1" = "nombre2", NIL sinon.Semblable (Prédicat) [EQUAL] (EQUAL expression1 expression2) Retourne T si "expression1" et "expression2" semblables, NIL sinon.Valeur [EVAL] (EVAL expression) Retourne la valeur de la valeur de "expression" Exemple : ?(EVAL T) T ?(PROGN (SET N (+ 1 2)) ? (EVAL N)) 4 ?(EVAL (QUOTE (QUOTE (+ 1 2)))) (+ 1 2) (EVAL (QUOITE expression)) <=> expression 15
  • 16. Bruno Delb http://www.brunodelb.com Date : 12/02/2001 Le langage LispExposant [EXP] (EXP nombre1 nombre2) Retourne nombre1 ^ nombre2 ("à la puissance") Exemple : ?(DE SQUARE (N) ? (TIMES N N)) SQUARE <=> (EXP N 2)Conversion mono-caractères [EXPLODECH] (EXPLODECH atome) Retourne la liste des symboles mono-caractères composant le nom imprimable de son argument.Booléen Faux [FALSE] (FALSE expression) Retourne toujours NIL.Définition de fonction [FLAMBDA] (FLAMBDA (variable) expression1 ... expressionn) Définit une FEXPR sans nom (anonyme) dont "variable" est égal à la liste réunissant "expression1 ... expressinon". Exemple : ?((FLAMBDA (ARGS) ? (PRINT (LIST ARGS = ARGS)) ? T) ? ARG1 ARG2 ARG3) (ARGS = (ARG1 ARG2 (QUOTE ARG3))) TTest si fonction [FUNCTIONP] (FUNCTIONP expression) Retourne T si expression est une fonction, NIL sinon. 16
  • 17. Bruno Delb http://www.brunodelb.com Date : 12/02/2001 Le langage LispListe - Lecture de P-Liste (GET identificateur indicateur) Retourne lobjet placé dans la P-liste de "identificateur" sous la priorité "indicateur", NIL sil nexiste pas. Exemple : ?(GET NOMBRES PREMIERS) NIL ?(PUT NOMBRES PREMIERS (2 3)) NOMBRES ?(GET NOMBRES PREMIERS) (2 3) ?(PUT NOMBRES PREMIERS (2 3 5)) NOMBRES ?(PUT NOMBRES PREMIERS (2 3 5 7)) NOMBRES (2 3 5 7) ?(PUT NOMBRES PREMIERS NIL) NOMBRES NIL> [GREATERP] (GREATERP nombre1 nombre2) Retourne T si nombre1 > nombre2, NIL sinon. Exemple : ?(GREATERP 1 (MINUS 1)) T ?(GREATERP 0 0) NILSi ... Alors ... Sinon [IF] (IF condition liste-alors liste-sinon) Evalue liste-alors si la condition est vraie, la liste-sinon sinon. Exemple : ?(IF T 1 2 3) 1 ?(IF NIL 1 2) 2 ?(IF (NULL (LISTE)) 1 ? 2 3 4 5) 5 ?(IF (NOT T) T) NIL 17
  • 18. Bruno Delb http://www.brunodelb.com Date : 12/02/2001 Le langage LispSi Non ... Alors ... Sinon [IFN] (IFN condition liste-alors liste-sinon) Evalue liste-alors si la condition est fausse, la liste-sinon sinon. Exemple : (IFN T 1 2 3) -> 3 (IFN () 1 2 3) -> 1Définition de fonction [LAMBDA] (LAMBDA (variable1...variablen) expression1...expressionn) Définit une EXPR sans nom (anonyme) de paramètres variable1 ... variablen et de corps expression1 ... expressionn. Exemple : ?((LAMBDA (X) (PRINT X)) EXEMPLE) EXEMPLE EXEMPLE ?(MAPCAR (1 2 3 4 5) ? (LAMBDA (I) (* I I I))) (1 8 27 64 125)Nombre de termes [LENGTH] (LENGTH expression) Retourne le nombre de termes dans "expression" Exemple : ?(LENGTH NIL) 0 ?(LENGTH (A (B C))) 2 18
  • 19. Bruno Delb http://www.brunodelb.com Date : 12/02/2001 Le langage LispEvaluation [LET] (LET ((identificateur1 expression1) ... identificateurn expressionn)) expressions) Retourne lévaluation avec (identificateur1 = expression1, ... identificateurn = expressionn) de expressions. Exemple : ?(DM LET (CALL) ? (CONS (CONS LAMBDA ? (CONS (MAPCAR (CADR CALL) ? CAR) ? (CDDR CALL))) ? (MAPCAR (CADR CALL) CADR)))Liste [LIST] (LIST expressions) Retourne la liste "expressions"Teste si atome appartient à la liste [MEMBER] (MEMBER atome liste) Retourne T si "atome" appartient à "liste", NIL sinon. Exemple : ?(DE MEMBER (A L) ? (AND (PAIRP L) ? (OR (EQ A (CAR L)) ? (MEMBER A (CDR L)))))Liste pointée [MCONS] (MCONS expressions) Retourne la liste pointée par "expressions"Définition dexpression [MLAMBDA] (MLAMBDA (variable) expression1 ... expressionn) Définit une MEXPR sans nom (anonyme) dont "variable" est égal à la forme dappel de "expression1 ... expressionn". 19
  • 20. Bruno Delb http://www.brunodelb.com Date : 12/02/2001 Le langage LispDéfinition dexpression [NLAMBDA] (NLAMBDA (variable) expression1 ... expressionn) Définit une NEXPR sans nom (anonyme) dont "variable" reçoit lévaluation de "expression1...expressionn". Exemple : ?((NLAMBDA (L) L) ceci fabrique une liste) (ceci fabrique une liste) ?((NLAMBDA (L) L) ? ((NLAMBDA (L) L) D un nombre ? quelconque de termes)) ((D un_nombre_quelconque_de_termes))Teste si NIL [NOT] (NOT expression) Retourne NIL si "expression" vaut NIL, T sinon.Teste si vide [NULL] (NULL expression) Retourne T si "expression" est vide, NIL sinon. Exemple : ?(NULL ()) T ?(NULL T) NIL ?(NULL (CDR (LISTE))) TTeste si nombre [NUMBERP] (NUMBERP expression) Retourne T si "expression" est un nombre, NIL sinon. Exemple : ?(NUMBERP 3) T ?(NUMBERP (+ 3 4)) T 20
  • 21. Bruno Delb http://www.brunodelb.com Date : 12/02/2001 Le langage LispOu logique [OR] (OR expressions) Evalue les expressions jusquà ce que lune delles valle non-NIL. Retourne la valeur de la première expression qui faut non-NIL, la dernière des expressions sinon. Exemple : (OR) -> () (OR ()) -> () (OR 1 2) -> 1 (OR () () 2 3) -> 2Teste si non vide [PAIRP] (PAIRP liste) Retourne T si "expression" est une liste non vide, NIL sinon. Exemple : ?(PAIRP (LISTE)) T ?(PAIRP ATOM) NIL ?(PAIRP 314) NIL ?(PARIP ATOM) NIL+ [PLUS] (PLUS nombre1 nombre2 ... nombren) Retourne nombre1 + nombre2 + ... + nombren Exemple : ?(+ (SET N -1) (PLUS N N) (PLUS)) -3Affichage sans saut à la ligne [PRIN/PRIN1] (PRIN expressions) ou (PRIN1 expressions) Affiche "expression1", "expression2", ... "expressionn" sans retour à la ligne suivante. Retourne lexpression. 21
  • 22. Bruno Delb http://www.brunodelb.com Date : 12/02/2001 Le langage LispAffichage avec saut à la ligne [PRINT] (PRINT expressions) Affiche "expression1", "expression2", ... "expressionn" + saut à la ligne. Retourne expressionn. Exemple : ?(PROGN (PRINT (CONS ESSAI (DE PRINT))) ? T) (ESSAI DE PRINT) T ?(PRINT (PRINT PRINT-SAUTE-A-LA-LIGNE)) PRINT-SAUTE-A-LA-LIGNE PRINT-SAUTE-A-LA-LIGNE PRINT-SAUTE-A-LA-LIGNEEvaluation tour à tour [PROGN] (PROGN formes ...) Evalue tour à tour les formes. Retourne la dernière des formes. Exemple : ?(PROGN 1 2 3) 3 ?(PROGN 1 2) 2 ?(PROGN 1) 1 ?(IF (NOT T) 1) NILEcriture en P-Liste [PUT] (PUT identificateur indicateur propriété) Place dans la P-liste, "identificateur" (atome) et sous lindicateur de priorité "indicateur" la propriété "propriété". 22
  • 23. Bruno Delb http://www.brunodelb.com Date : 12/02/2001 Le langage LispParamètre dappel [QUOTE] (QUOTE expression) Retourne son paramètre dappel sans aucun calcul. Exemple : (QUOTE (1+ 4) -> (1+ 4) (A (B C)) -> (A (B C)) A -> A A -> A (QUOTE (QUOTE A)) -> A (QUOTE A B) -> (QUOTE A B)Division [QUOTIENT] (QUOTIENT nombre1 nombre2) Retourne nombre1 / nombre2 Exemple : ?(QUOTIENT +26 (ADD1 7)) 3Lecture au clavier [READ] (READ) Lecture dune expression (symbole, nombre ou liste). Retourne une expression. Exemple : ?(PROGN (PRINT (VALEUR DE L EXPRESSION)) ? (SET EXP (READ)) ? (PRINT MERCI) ? T) (VALEUR DE L EXPRESSION) ? (CETTE LISTE A ETRE ? LUE ) MERCI T ?EXP (CETTE LISTE VA ETRE LUE) 23
  • 24. Bruno Delb http://www.brunodelb.com Date : 12/02/2001 Le langage LispReste [REMAINDER] (REMAINDER nombre1 nombre2) ou (MOD nombre1 nombre2) Retourne le reste de (nombre1 / nombre2) Exemple : ?(EQ (SET N 1984) ? (+ (* (/ N 31) 31) ? (REMAINDER N 31))) TListe inversée [REVERSE] (REVERSE (expression1 ... expressionn)) Retourne la liste inversée Exemple : ?(DE ALL-BUT-LAST (L) ? (IF (PAIRP (CDR (L)) ? (CONS (CAR L) ? (ALL-BUT-LAST (CDR L))))) ?(DE REVERSE (L) ? (IF (PAIRP L) ? (CONS (LAST L) ? (REVERSE (ALL-BUT-LAST L))))) REVERSE ?(DE REVERSE (L) ? (IF (PAIRP L) ? (APPEND (REVERSE (CDR L)) ? (LIST (CAR L)))))Pointeur [RPLACE] (RPLACA paire-pointée expression) Retourne le premier argument de la "paire-pointée", et modifie le pointeur gauche (CAR) pour quil pointe sur le second argument. CAR - CDRPointeur [RPLACD] (RPLACD paire-pointée expression) Retourne le premier argument de la "paire-pointée", et modifie le pointeur droit (CDR). CAR - CDR 24
  • 25. Bruno Delb http://www.brunodelb.com Date : 12/02/2001 Le langage LispAffectation [SET] (SET identificateur expression) Retourne "expression". Cest équivalent à : symbole := expressionAffectation (autre) [SETQ] (SETQ identificateur expression) Cest équivalent à : symbole := expressionRacine carrée [SQRT] (SQRT nombre) Retourne la racine carrée Exemple : ?(DE SQRT (N) ? (SQRT1 1)) SQRT ?(DE SQRT1 (P) ? (IF (GT (* P P) N) ? (SUB1 P) ? (SQRT1 (ADD1 P)))) SQRT1 ?(SQRT 51) 7Remplacement datome [SUBST] (SUBST expression1 atomes expression2) Retourne "expression2" dont les "atomes" ont été remplacés par "expression1".Teste si symbole [SYMBOLP] (SYMBOLP expression) Retourne T si "expression" est un symbole, NIL sinon.Saut à la ligne [TERPRI] (TERPRI) Saut à la ligne. 25
  • 26. Bruno Delb http://www.brunodelb.com Date : 12/02/2001 Le langage LispMultiplication [TIMES] (TIMES nombre1 nombre2 ... nombren) Retourne nombre1 * nombre2 * ... * nombren Exemple : ?(TIMES (SET N -1) (MINUS N)) -1Vrai [TRUE] (TRUE expression) Retourne toujours T.Ecriture Noms des variables Toujours choisir des identificateurs parlants. Fonction carré dun nombre : ? (DE CARRE (N) ? (* N N)) = CARRE Trouver le troisième terme du deuxième terme dune liste : (DE (CADDARD (L) (CAR (CDR (CDR (CAR (CDR L)))))) Cascade daccesseurs Une cascade daccesseurs (suite dapplications de CAR ou CDR) se découpe de façon compréhensible. Ordres de test Lordre dapparition des tests dans une condition est important si les tests sont dépendants. Séparation des pouvoirs Séparer clairement les entrées-sorties des calculs. Toujours les concentrer dans des fonctions spécialisées. Proscription des effets de bord Limiter lutilisation deffets de bord, et en particulier lutilisation de SET. Conditionnelle (COND (test1 expression1 ...) ... (testn expressionn ...) (T forme-de-rattrapage-d-erreur)) 26
  • 27. Bruno Delb http://www.brunodelb.com Date : 12/02/2001 Le langage LispEconomie Réutiliser au mieux les objets existants. 27
  • 28. Bruno Delb http://www.brunodelb.com Date : 12/02/2001 Le langage LispUn langage : LeLisp Comment lancer LeLisp ? Taper LELISP. Puis apparaît le "?" : vous êtes dans la boucle top-level, au niveau du read; lévaluateur attend une s-expression. Comment sauvegarder des fonctions définies ? ?(PEPE <nom-fichier>) pour lancer léditeur PEPE Vous arrivez alors à un menu. Les fichiers Lisp ont lextension .LL. F1 = Aide ?(PEPE ()) pour revenir à la dernière édition Comment annuler la dernière commande ? Pour annuler la dernière commande, taper "..". Exemple : ?(DE toto (n) ? ((IF (= n 0) ?.. = *** erreur lecture *** ?(DE toto .... etc .... Comment charger un fichier ? ?^Lnom-fichier (appuyer sur CTRL-L) Quels sont les outils de mise au point ? Comment activer la trace ? ?(TRACE fonction) Comment désactiver la trace ? ?(UNTRACE fonction) 29
  • 29. Bruno Delb http://www.brunodelb.com Date : 12/02/2001 Le langage LispComment sélectionner un disque ou retourner la valeur dudisque ? ?(DRIVE) pour le disque A = 0 0 pour le disque B = 1 ?(DRIVE 1) pour le disque C = 2 1 pour le disque D = 3 30
  • 30. Bruno Delb http://www.brunodelb.com Date : 12/02/2001 Le langage LispLa comparaison Pascal / Lisp Factorielles En Pascal : En Lisp : Fact := 1; (DE fact (n) For I := 1 To n Do IF (EQN n 1) Fact := Fact + I; 1 (* n (fact (- n 1))))) 31
  • 31. Bruno Delb http://www.brunodelb.com Date : 12/02/2001 Le langage LispLa comparaison Prolog / Pascal Quelles sont les caractéristiques de Prolog ? On déclare tout ce quon sait sur un sujet, et Prolog se débrouille pour répondre aux questions. Il dispose dune mécanique générale de stockage et dexploration dune base de faits et de règles. Quelles sont les caractéristiques de Pascal ? Cest un langage procédural. Les programmes sont spécifiques : • à la base de faits utilisée • à la question posée Il permet de généraliser : • Il peut contenir nimporte quelle base de fait. • On peut effectuer lexploration en fonction de nimporte quelle question. Quels sont les points communs entre Prolog et Lisp ? • Récursivité • Notation fonctionnelle • Utilisation de paramètres pour transmettre des valeurs, absence de variables globales • Syntaxe très simple • Complexité au niveau sémantique Quelles sont les différences entre Prolog et Lisp ? • LISP, langage de programmation général. • PROLOG, spécialisé dans lexploration des bases des règles. • Au point de vue pratique, - il est possible décrire un interpréteur PROLOG en LISP, - il est impossibe décrire un interpréteur LISP en PROLOG. 33
  • 32. Bruno Delb http://www.brunodelb.com Date : 12/02/2001 Le langage LispLes mécanismes dévaluation Comment est évaluée une S-Expression ? Lorsque lon soumet une s-expression (expression qui respecte la syntaxe Lisp) à linterpréteur, il lévalue immédiatement affiche le résultat. Comment est évalué un symbole ? Il renvoit ce que contient la C-VAL du symbole. SETQ est une fonction qui permet de placer une valeur dans la C-VAL dun symbole. ? facile = *** erreur: facile variable indéfinie. *** ? (SETQ facile 2) =2 ? facile =2 Comment est évalué un nombre ? Lorsque lon soumet un nombre à lévaluateur, il renvoit ce nombre. ? 8730 = 8730 Comment est évaluée une chaîne ? Cest la chaîne elle-même. ? "BONJOUR" = "BONJOUR" Comment est évaluée une liste ? Lorsque lon soumet une liste à lévaluateur il considère quil sagit dun appel de fonction. Il faut donc que le premier élément de la liste soit un symbole correspondant à une fonction. ? (- 4 3) =1 ? (1 2) = *** erreur: 1 fonction indéfinie *** 35
  • 33. Bruno Delb http://www.brunodelb.com Date : 12/02/2001 Le langage LispLes fonctions Comment définir une fonction ? On effectue la définition dune fonction en utilisant la fonction DE qui permet de définir de nouveaux symboles en tant que fonction (la F-VAL du symbole va donc être affectée : (DE <nom_de_la_fonction> <liste_des_paramètres> <corps_de_la_fonction>) ? (DE plus (x y ) (+ x y)) = plus ? (plus 3 5) =8 (CAR argument) Renvoit le premier élément de la liste "argument". (CDR argument) Renvoit la liste "argument" privée de son premier élément. ? (CAR (1 2 3 4)) = *** erreur: 1 fonction indéfinie *** Il y a évaluation de la liste (1 2 3 4) mais 1 nest pas une fonction. On utilise "" (quote) pour empêcher lévaluation : ? (CAR (1 2 3 4)) =1 (SETQ <argument1> <argument2>) Place dans la C-VAL de <argument1> le résultat de lévaluation de <argument2>. ? (SETQ (x 4) =4 (VALFN <symbole>) Retourne la F_VAL du symbole <symbole>. ? (VALFN plus) = ((x y) (+ x y)) 36
  • 34. Bruno Delb http://www.brunodelb.com Date : 12/02/2001 Le langage Lisp (IF <test><expr si vrai><expr si faux1>...<expr si faux2>) Si lévaluation de "test" retourne vrai, alors il y a évaluation de <expr si vrai>, sinon il y a évaluations successives de <expr si faux1> à <expr si fauxn>. ? (IF (= 3 4) 7 (SETQ x 2) (SETQ y 3) (* X Y)Quelles sont les autres fonctions ? OR, AND, COND, QUOTE, IF, IFN, FALSE, TRUE, NULL, NOT, END, ATOM, ATOMP, CONSTANTP, SYMBOLP, VARIABLEP, NUMBERP, CONSP, LISTP, NLISTP, EQ, NEQ, EQUAL, NEQUAL, CAR, CDR, C...R, TYPEFN, VALFN, SET, SETQ, SETQQ, +, 1+, -, 1-, ABS, *, -, <>, /=, >=, >, <=, <, DE, DF, PLIST, GETPROP, GET, GETL, ADDPROP, PUTPROP, DEFPROP, REMPROP.Quels sont les contrôles possibles ? (PROGN formes ...) Evalue tour à tour les formes. La valeur finale est celle de la dernière des formes. (DE PROGN FORMES (CAR (LAST FORMES))) (IF si alors sinon ...) Evalue, suivant la valeur de SI, soit ALORS soit la séquence SINON ... La valeur de ce qui sera évalué deviendra celle de la forme IF initiale. (IF T 1 2 3) -> 1 (IFN si alors sinon ...) Evalue, si SI est faux, la séquence ALORS ou SINON ... La valeur de ce qui sera évalué deviendra celle de la forme IFN initiale. (IFN T 1 2 3) -> 3 (IFN () 1 2 3) -> 1 37
  • 35. Bruno Delb http://www.brunodelb.com Date : 12/02/2001 Le langage LispComment manipuler les listes ? (CAR liste-non-vide) Retourne le premier terme de son argument. (CDR liste-non-vide) Retourne son argument privé de son premier terme. (CONS expression liste-quelconque) Retourne une liste dont son premier argument est le premier terme et dont les suivants sont ceux de son second argument. (LIST expressions) Retourne la liste dont les termes sont les arguments de LIST.Comment manipuler les prédicats ? (ATOM expression) Retourne T si son argument est un atome, sinon NIL. (NUMBERP expression) Retourne T si son argument est un nombre, sinon NIL. (SYMBOLP expression) Retourne T si son argument est un symbole, sinon NIL. (CONSP expression) Retourne T si son argument est une liste non vide, sinon NIL. (EQ symbole1 symbole2) Retourne T si SYMBOLE1 et SYMBOLE2 sont le même symbole. (EQN nombre1 nombre2) Retourne T si NOMBRE1 et NOMBRE2 sont le même nombre. 38
  • 36. Bruno Delb http://www.brunodelb.com Date : 12/02/2001 Le langage Lisp (EQUAL expression1 expression2) Retourne T si EXPRESSION1 et EXPRESSION2 sont semblables. (NULL expression) Retourne T si EXPRESSION est la liste vide, sinon NIL. (NULL ()) -> T (NULL T) -> () (EVAL forme) Retourne la valeur de FORME. (QUOTE expression) Retourne son paramètre dappel sans aucun autre calcul (sans évaluer celui- ci). (QUOTE (1+ 4) -> (1+-4) (A (B C)) -> (A (B C)) A -> A A -> A (QUOTE (QUOTE A)) -> A (QUOTE A B) -> (QUOTE A B)Comment définir des fonctions ? (DE nom (variables) formes) Définit une nouvelle fonction NOM, ayant des VARIABLES et se calculant comme (PROGN formes). Les variables ne sont liées aux arguments que pendant le calcul de la fonction. Lorsque la fonction retourne la valeur, elles reprennent leur valeur antérieure : celle quelles possédaient à lappel de la fonction : cest le mécanisme de la liaison dynamique. (DE nom variable formes) Définit une nouvelle fonction NOM se calculant comme (PROGN formes). Lors de lappel, la VARIABLE (différente de NIL), est liée à la liste des arguments. (DM / (LAMBDA (variables) formes) A pour valeur une nouvelle fonction définie par VARIABLES et FORMES. (LAMBDA variable formes) 39
  • 37. Bruno Delb http://www.brunodelb.com Date : 12/02/2001 Le langage Lisp A pour valeur une nouvelle fonction anonyme capable de récupérer un nombre quelconque darguments.Comment manipuler les propriétés ? (SET symbole expression) Impose que la valeur de son premier argument soit désormais son second argument. Ce dernier est retourné. (SETQ symbole expression) Impose que la valeur du premier paramètre dappel soit celle du second. (PUTPROP symbole valeur clé) Retourne SYMBOLE dans la P-liste duquel a été insérée la propriété CLE de valeur VALEUR. (GETPROP symbole clé) Retourne NIL si aucune propriété CLE nexiste dans la P-liste de symbole SYMBOLE. Sinon, retourne la valeur associée.Comment effectuer des entrées et des sorties ? (READ) Lecture dune expression (symbole, nombre ou liste) dans le flot dentrée (clavier, fichier, ...) et la retourne. (PRIN expressions) Ecrit ses arguments et retourne le dernier comme valeur. (TERPRI) Saut à la ligne. 40
  • 38. Bruno Delb http://www.brunodelb.com Date : 12/02/2001 Le langage Lisp (PRINT expressions) Ecrit ses arguments et effectue un saut à la ligne. Retourne le dernier de ses arguments comme valeur.Comment faire de la chirurgie ? (RPLACA liste-non-vide expression) Retourne son premier argument dont le CAR a été altéré de manière à être son second argument. (RPLACD liste-non-vide expression) Retourne son premier argument dont le CDR a été altéré de manière à être son second argument.Comment faire des conversions ? (EXPLODECH atome) Retourne la liste des symboles mono-caractères composant le nom imprimable de son argument. (IMPLODECH liste-de-caractères) Retourne latome symbole ou nombre ayant largument comme liste de symboles mono-caractères composant son nom imprimable. (FUNCTIONP fonction) Retourne la liste (préfixée par LAMBDA ou MLAMBDA) définissant la fonction. (GETDEF symbole)Comment faire de l’arithmétique élémentaire ? (+ nombres) ou (* nombres) Retourne la somme ou le produit des arguments. Si pas dargument, retourne lélément neutre de lopération : 0 ou 1. 41
  • 39. Bruno Delb http://www.brunodelb.com Date : 12/02/2001 Le langage Lisp (- nombre) Retourne lopposé de largument. (- nombres) Retourne la différence du premier argument et de la somme des suivants. (/ nombres) ou ( nombres) Retourne le quotient ou le reste de la division du premier argument par le second (différent de 0). (> nombres) ou (=< nombres) ou ... = ou >= ou > Retourne T ou NIL suivant le résultat de la comparaison.Comment utiliser les fonctions booléennes ? (AND expressions) Evalue tour à tour les expressions. Dès quune valeur NIL est obtenue, retourne cette valeur, sinon celle de la dernière des expressions. (AND) -> T (AND ()) -> () (AND 1 2 3 4) -> 4 (AND 11 2 () 4) -> () (FALSE expression) Retourne F quelque soit lEXPRESSION. 42
  • 40. Bruno Delb http://www.brunodelb.com Date : 12/02/2001 Le langage Lisp (OR expressions) Evalue tour à tour les expressions. Dès quune valeur non-NIL est obtenue, retourne cette valeur, sinon celle de la dernière des expressions. Remarque : NIL = () (OR) -> () (OR ()) -> () (OR 1 2) -> 1 (OR () () 2 3) -> 2 (NOT expression) Retourne T si EXPRESSION vaut NIL, sinon NIL. (TRUE expression) Retourne T quelque soit lEXPRESSION.Comment faire le reste ? (LET (liaisons) formes) Evalue FORMES dans lenvironnement courant temporairement enrichi des LIAISONS. Une LIAISON a la structure (SYMBOLE FORME) et lie SYMBOLE à la valeur de FORME. (MCONS expression1 expression2 expressions) Retourne la « liste pointée » de tous ses arguments. Généralisation de CONS. (COND (si1 alors1 ...) (si2 alors2 ...) ...) Evalue tour à tour les conditions SIi. Retourne la valeur de (PROGN ALORSi) poue le premier i tel que SIi ait pour valeur non-NIL. Si aucun des SIi ne vaut non-NIL, alors COND retourne NIL. (COND () 1 2) (T 3 4 5)) -> 5 43

×