le langage lisp

49
Bruno Delb http://www.brunodelb.com Date : 12/02/2001 Le langage Lisp Sommaire DÉFINITIONS..................................................................5 QUEST-CE QUUN ATOME ?.......................................................5 QUEST-CE QUUNE LISTE ?......................................................5 QUEST-CE QUUN ENVIRONNEMENT ?................................................5 QUEST-CE QUUNE EXPRESSION ?..................................................5 QUEST-CE QUUN PROGRAMME ?....................................................5 QUEST-CE QUE NIL ?..........................................................5 QUEST-CE QUUN CARACTÈRE SPÉCIAL ?.............................................6 QUEST-CE QUUNE A-LISTE ?....................................................6 L’ÉVALUATION.................................................................7 QUEL EST LE MÉCANISME ?.......................................................7 QUEST-CE QUUNE S-EXPRESSION ?................................................7 QUEST-CE QUE LE SYMBOLE [SETQ] ?.............................................7 QUEST-CE QUUN NOMBRE ?......................................................7 QUEST-CE QUUNE CHAÎNE ?.....................................................7 QUEST-CE QUUNE LISTE ?......................................................8 QUEST-CE QUUNE FORME EXPR ?.................................................8 LES COMMANDES................................................................9 DÉFINITION DUNE COMMANDE [DE].................................................9 GESTION DUNE 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 1

Upload: bruno-delb

Post on 21-Jun-2015

1.002 views

Category:

Technology


2 download

TRANSCRIPT

Page 1: Le langage Lisp

Bruno Delb http://www.brunodelb.com Date : 12/02/2001

Le langage Lisp

Sommaire

DÉFINITIONS....................................................................................................5

QU’EST-CE QU’UN ATOME ?............................................................................................................5QU’EST-CE QU’UNE LISTE ?............................................................................................................5QU’EST-CE QU’UN ENVIRONNEMENT ?..............................................................................................5QU’EST-CE QU’UNE EXPRESSION ?...................................................................................................5QU’EST-CE QU’UN PROGRAMME ?....................................................................................................5QU’EST-CE QUE NIL ?...................................................................................................................5QU’EST-CE QU’UN CARACTÈRE SPÉCIAL ?..........................................................................................6QU’EST-CE QU’UNE A-LISTE ?.........................................................................................................6

L’ÉVALUATION..................................................................................................7

QUEL EST LE MÉCANISME ?.............................................................................................................7QU’EST-CE QU’UNE S-EXPRESSION ?...............................................................................................7QU’EST-CE QUE LE SYMBOLE [SETQ] ?............................................................................................7QU’EST-CE QU’UN NOMBRE ?..........................................................................................................7QU’EST-CE QU’UNE CHAÎNE ?..........................................................................................................7QU’EST-CE QU’UNE LISTE ?............................................................................................................8QU’EST-CE QU’UNE FORME EXPR ?.................................................................................................8

LES COMMANDES..............................................................................................9

DÉFINITION D’UNE COMMANDE [DE]................................................................................................9GESTION D’UNE LISTE....................................................................................................................9

Premier élément [CAR]........................................................................................................9Tout sauf premier élément [CDR].......................................................................................9

AFFECTATION C-VAL [SETQ]......................................................................................................10RETOUR F-VAL [VALFN]............................................................................................................10SI ... ALORS ... SINON [IF]..........................................................................................................10OPÉRATION ARITHMÉTIQUE...........................................................................................................10

+.........................................................................................................................................10-..........................................................................................................................................10- (opposé)...........................................................................................................................11/..........................................................................................................................................11Exemple [+/*]....................................................................................................................11>/</=>/=</<>/=..............................................................................................................11

ET LOGIQUE [AND]....................................................................................................................11CONCATÉNATION [APPEND]........................................................................................................12ASSOCIATION [ASSOC]..............................................................................................................12TESTE ATOME [ATOME].............................................................................................................12PREMIER ARGUMENT [CAR].........................................................................................................12TOUT SAUF LE PREMIER ARGUMENT [CDR].....................................................................................13SI ... ALORS [COND].................................................................................................................13CONCATÉNATION [CONS]...........................................................................................................13TESTE SI LISTE LISTE VIDE [CONSP].............................................................................................13DÉFINITION DE FONCTION [DE].....................................................................................................14DIFFÉRENCE [DIFFERENCE].......................................................................................................14EGALITÉ [EQ]............................................................................................................................15EGALITÉ (PRÉDICAT) [EQN].........................................................................................................15SEMBLABLE (PRÉDICAT) [EQUAL]................................................................................................15VALEUR [EVAL].........................................................................................................................15EXPOSANT [EXP].......................................................................................................................16CONVERSION MONO-CARACTÈRES [EXPLODECH]...........................................................................16

1

Page 2: Le langage Lisp

Bruno Delb http://www.brunodelb.com Date : 12/02/2001

Le langage Lisp

BOOLÉEN FAUX [FALSE]............................................................................................................16DÉFINITION DE FONCTION [FLAMBDA]..........................................................................................16TEST SI FONCTION [FUNCTIONP]................................................................................................16LISTE - LECTURE DE P-LISTE........................................................................................................17> [GREATERP].......................................................................................................................17SI ... ALORS ... SINON [IF]..........................................................................................................17SI NON ... ALORS ... SINON [IFN]................................................................................................18DÉFINITION DE FONCTION [LAMBDA]...........................................................................................18NOMBRE DE TERMES [LENGTH]...................................................................................................18EVALUATION [LET].....................................................................................................................19LISTE [LIST].............................................................................................................................19TESTE SI ATOME APPARTIENT À LA LISTE [MEMBER]........................................................................19LISTE POINTÉE [MCONS]............................................................................................................19DÉFINITION D'EXPRESSION [MLAMBDA].......................................................................................19DÉFINITION D'EXPRESSION [NLAMBDA]........................................................................................20TESTE SI NIL [NOT]...................................................................................................................20TESTE SI VIDE [NULL]................................................................................................................20TESTE SI NOMBRE [NUMBERP]...................................................................................................20OU LOGIQUE [OR]......................................................................................................................21TESTE SI NON VIDE [PAIRP]........................................................................................................21+ [PLUS].................................................................................................................................21AFFICHAGE SANS SAUT À LA LIGNE [PRIN/PRIN1]...........................................................................21AFFICHAGE AVEC SAUT À LA LIGNE [PRINT]...................................................................................22EVALUATION TOUR À TOUR [PROGN]............................................................................................22ECRITURE EN P-LISTE [PUT]........................................................................................................22PARAMÈTRE D'APPEL [QUOTE]....................................................................................................23DIVISION [QUOTIENT]..............................................................................................................23LECTURE AU CLAVIER [READ]......................................................................................................23RESTE [REMAINDER]...............................................................................................................24LISTE INVERSÉE [REVERSE].......................................................................................................24POINTEUR [RPLACE]..................................................................................................................24POINTEUR [RPLACD].................................................................................................................24AFFECTATION [SET]...................................................................................................................25AFFECTATION (AUTRE) [SETQ].....................................................................................................25RACINE CARRÉE [SQRT].............................................................................................................25REMPLACEMENT D'ATOME [SUBST]..............................................................................................25TESTE SI SYMBOLE [SYMBOLP]...................................................................................................25SAUT À LA LIGNE [TERPRI].........................................................................................................25MULTIPLICATION [TIMES]............................................................................................................26VRAI [TRUE]............................................................................................................................26ECRITURE..................................................................................................................................26

Noms des variables...........................................................................................................26Cascade d'accesseurs........................................................................................................26Ordres de test....................................................................................................................26Séparation des pouvoirs....................................................................................................26Proscription des effets de bord.........................................................................................26Conditionnelle....................................................................................................................26Economie...........................................................................................................................27

UN LANGAGE : LELISP......................................................................................29

COMMENT LANCER LELISP ?.........................................................................................................29COMMENT SAUVEGARDER DES FONCTIONS DÉFINIES ?.......................................................................29COMMENT ANNULER LA DERNIÈRE COMMANDE ?...............................................................................29COMMENT CHARGER UN FICHIER ?.................................................................................................29QUELS SONT LES OUTILS DE MISE AU POINT ?..................................................................................29

Comment activer la trace ?...............................................................................................29Comment désactiver la trace ?.........................................................................................29Comment sélectionner un disque ou retourner la valeur du disque ?.............................30

LA COMPARAISON PASCAL / LISP.....................................................................31

2

Page 3: Le langage Lisp

Bruno Delb http://www.brunodelb.com Date : 12/02/2001

Le langage Lisp

FACTORIELLES............................................................................................................................31

LA COMPARAISON PROLOG / PASCAL...............................................................33

QUELLES SONT LES CARACTÉRISTIQUES DE PROLOG ?.......................................................................33QUELLES SONT LES CARACTÉRISTIQUES DE PASCAL ?........................................................................33QUELS SONT LES POINTS COMMUNS ENTRE PROLOG ET LISP ?............................................................33QUELLES SONT LES DIFFÉRENCES ENTRE PROLOG ET LISP ?...............................................................33

LES MÉCANISMES D'ÉVALUATION.....................................................................35

COMMENT EST ÉVALUÉE UNE S-EXPRESSION ?.................................................................................35COMMENT EST ÉVALUÉ UN SYMBOLE ?............................................................................................35COMMENT EST ÉVALUÉ UN NOMBRE ?.............................................................................................35COMMENT EST ÉVALUÉE UNE CHAÎNE ?...........................................................................................35COMMENT EST ÉVALUÉE UNE LISTE ?..............................................................................................35

LES 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 ?.......................................................................................37QUELS 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(GETPROP symbole clé).....................................................................................................40

COMMENT EFFECTUER DES ENTRÉES ET DES SORTIES ?......................................................................40(READ)................................................................................................................................40(PRIN expressions).............................................................................................................40(TERPRI)..............................................................................................................................40(PRINT expressions)...........................................................................................................41

COMMENT FAIRE DE LA CHIRURGIE ?..............................................................................................41

3

Page 4: Le langage Lisp

Bruno Delb http://www.brunodelb.com Date : 12/02/2001

Le langage Lisp

(RPLACA liste-non-vide expression)..................................................................................41(RPLACD liste-non-vide expression)..................................................................................41

COMMENT FAIRE DES CONVERSIONS ?............................................................................................41(EXPLODECH atome)..........................................................................................................41(IMPLODECH liste-de-caractères)......................................................................................41(FUNCTIONP fonction)........................................................................................................41(GETDEF symbole).............................................................................................................41

COMMENT 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 >........................................................42

COMMENT UTILISER LES FONCTIONS BOOLÉENNES ?..........................................................................42(AND expressions).............................................................................................................42(FALSE expression)............................................................................................................42(OR expressions)................................................................................................................43(NOT expression)...............................................................................................................43(TRUE expression).............................................................................................................43

COMMENT FAIRE LE RESTE ?.........................................................................................................43(LET (liaisons) formes).......................................................................................................43(MCONS expression1 expression2 expressions)...............................................................43(COND (si1 alors1 ...) (si2 alors2 ...) ...).............................................................................43

4

Page 5: Le langage Lisp

Bruno Delb http://www.brunodelb.com Date : 12/02/2001

Le langage Lisp

Définitions

Qu’est-ce qu’un atome ?

C'est 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 à l'atome 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.

De plus, la liste vide () est identifiée à l'atome NIL.

5

Page 6: Le langage Lisp

Bruno Delb http://www.brunodelb.com Date : 12/02/2001

Le langage Lisp

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)

T

Qu’est-ce qu’une A-Liste ?

A-LISTE est une liste d'associations :

= ((indicateur1 valeurs1 ...) (indicateur2 valeurs2 ...) ...

(indicateurn valeursn ...)

)

Exemple : L'environnement (variable, valeur).

6

Page 7: Le langage Lisp

Bruno Delb http://www.brunodelb.com Date : 12/02/2001

Le langage Lisp

L’évaluation

Quel est le mécanisme ?

Lorsque l'on soumet une s-expression à l'interpré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 d'un symbole.

Exemple :? facile= *** erreur: facile variable indéfinie. ***? (SETQ facile 2)= 2? facile= 2

Qu’est-ce qu’un nombre ?

Lorsque l'on soumet un nombre à l'évaluateur, il renvoit ce nombre.

Exemple :? 8730= 8730

Qu’est-ce qu’une chaîne ?

C'est la chaîne elle-même.

Exemple :? "BONJOUR"= "BONJOUR"

7

Page 8: Le langage Lisp

Bruno Delb http://www.brunodelb.com Date : 12/02/2001

Le langage Lisp

Qu’est-ce qu’une liste ?

Lorsque l'on soumet une liste à l'évaluateur, il considère qu'il s'agit d'un 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 c'est une EXPR.

2°) On évalue les autres arguments : N = 4 (dans l'environnement) 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 l'environnement initiale :

N - 4

8

Page 9: Le langage Lisp

Bruno Delb http://www.brunodelb.com Date : 12/02/2001

Le langage Lisp

Les 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 n'est pas une fonction.

On utilise "'" (quote) pour empêcher l'évaluation.? (CAR '(1 2 3 4))= 1

9

Page 10: Le langage Lisp

Bruno Delb http://www.brunodelb.com Date : 12/02/2001

Le langage Lisp

Affectation 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)= 4

Retour 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 \LISP\COMMANDE\ARITHMETIQUE [-] (BIS)

(- nombre1 ... nombren)

Retourne nombre1 - (nombre2 + ... + nombren)

10

Page 11: Le langage Lisp

Bruno Delb http://www.brunodelb.com Date : 12/02/2001

Le langage Lisp

- (opposé)

(- nombre)

Retourne l'opposé 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 l'une d'elles 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

Page 12: Le langage Lisp

Bruno Delb http://www.brunodelb.com Date : 12/02/2001

Le langage Lisp

Concaté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))NIL

Premier argument [CAR]

(CAR liste-non-vide)

Retourne le premier argument de la liste "liste-non-vide"

Exemple :?(CAR '(VOICI UNE (LISTE))VOICI

12

Page 13: Le langage Lisp

Bruno Delb http://www.brunodelb.com Date : 12/02/2001

Le langage Lisp

Tout 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))NIL

Si ... 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

Page 14: Le langage Lisp

Bruno Delb http://www.brunodelb.com Date : 12/02/2001

Le langage Lisp

Dé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 l'utiliser? (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)))DM

Différence [DIFFERENCE]

(DIFFERENCE nombre1 nombre2)

= nombre1 - nombre2

Exemple :?(DIFFERENCE 1968 (ADD1 1066))901

14

Page 15: Le langage Lisp

Bruno Delb http://www.brunodelb.com Date : 12/02/2001

Le langage Lisp

Egalité [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)T

Egalité (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

Page 16: Le langage Lisp

Bruno Delb http://www.brunodelb.com Date : 12/02/2001

Le langage Lisp

Exposant [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)))T

Test si fonction [FUNCTIONP]

(FUNCTIONP expression)

Retourne T si expression est une fonction, NIL sinon.

16

Page 17: Le langage Lisp

Bruno Delb http://www.brunodelb.com Date : 12/02/2001

Le langage Lisp

Liste - Lecture de P-Liste

(GET identificateur indicateur)

Retourne l'objet placé dans la P-liste de "identificateur" sous la priorité "indicateur", NIL s'il n'existe 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)NOMBRESNIL

> [GREATERP]

(GREATERP nombre1 nombre2)

Retourne T si nombre1 > nombre2, NIL sinon.

Exemple :?(GREATERP 1 (MINUS 1))T?(GREATERP 0 0)NIL

Si ... 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

Page 18: Le langage Lisp

Bruno Delb http://www.brunodelb.com Date : 12/02/2001

Le langage Lisp

Si 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)-> 1

Dé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)EXEMPLEEXEMPLE?(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

Page 19: Le langage Lisp

Bruno Delb http://www.brunodelb.com Date : 12/02/2001

Le langage Lisp

Evaluation [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 d'expression [MLAMBDA]

(MLAMBDA (variable) expression1 ... expressionn)

Définit une MEXPR sans nom (anonyme) dont "variable" est égal à la forme d'appel de "expression1 ... expressionn".

19

Page 20: Le langage Lisp

Bruno Delb http://www.brunodelb.com Date : 12/02/2001

Le langage Lisp

Définition d'expression [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)))T

Teste si nombre [NUMBERP]

(NUMBERP expression)

Retourne T si "expression" est un nombre, NIL sinon.

Exemple :?(NUMBERP 3)T?(NUMBERP (+ 3 4))T

20

Page 21: Le langage Lisp

Bruno Delb http://www.brunodelb.com Date : 12/02/2001

Le langage Lisp

Ou logique [OR]

(OR expressions)

Evalue les expressions jusqu'à ce que l'une d'elles 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)-> 2

Teste 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))-3

Affichage sans saut à la ligne [PRIN/PRIN1]

(PRIN expressions) ou (PRIN1 expressions)

Affiche "expression1", "expression2", ... "expressionn" sans retour à la ligne suivante. Retourne l'expression.

21

Page 22: Le langage Lisp

Bruno Delb http://www.brunodelb.com Date : 12/02/2001

Le langage Lisp

Affichage 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-LIGNEPRINT-SAUTE-A-LA-LIGNEPRINT-SAUTE-A-LA-LIGNE

Evaluation 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)NIL

Ecriture en P-Liste [PUT]

(PUT identificateur indicateur propriété)

Place dans la P-liste, "identificateur" (atome) et sous l'indicateur de priorité "indicateur" la propriété "propriété".

22

Page 23: Le langage Lisp

Bruno Delb http://www.brunodelb.com Date : 12/02/2001

Le langage Lisp

Paramètre d'appel [QUOTE]

(QUOTE expression)

Retourne son paramètre d'appel 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))3

Lecture au clavier [READ]

(READ)

Lecture d'une 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 )MERCIT?EXP(CETTE LISTE VA ETRE LUE)

23

Page 24: Le langage Lisp

Bruno Delb http://www.brunodelb.com Date : 12/02/2001

Le langage Lisp

Reste [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)))T

Liste 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 qu'il pointe sur le second argument.

CAR - CDR

Pointeur [RPLACD]

(RPLACD paire-pointée expression)

Retourne le premier argument de la "paire-pointée", et modifie le pointeur droit (CDR).

CAR - CDR

24

Page 25: Le langage Lisp

Bruno Delb http://www.brunodelb.com Date : 12/02/2001

Le langage Lisp

Affectation [SET]

(SET identificateur expression)

Retourne "expression".

C'est équivalent à : symbole := expression

Affectation (autre) [SETQ]

(SETQ identificateur expression)

C'est équivalent à : symbole := expression

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

Remplacement d'atome [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.

Multiplication [TIMES]

25

Page 26: Le langage Lisp

Bruno Delb http://www.brunodelb.com Date : 12/02/2001

Le langage Lisp

(TIMES nombre1 nombre2 ... nombren)

Retourne nombre1 * nombre2 * ... * nombren

Exemple :?(TIMES (SET 'N -1) (MINUS N))-1

Vrai [TRUE]

(TRUE expression)

Retourne toujours T.

Ecriture

Noms des variables

Toujours choisir des identificateurs parlants.

Fonction carré d'un nombre :? (DE CARRE (N)? (* N N))= CARRE

Trouver le troisième terme du deuxième terme d'une liste :(DE (CADDARD (L)(CAR (CDR (CDR (CAR (CDR L))))))

Cascade d'accesseurs

Une cascade d'accesseurs (suite d'applications de CAR ou CDR) se découpe de façon compréhensible.

Ordres de test

L'ordre d'apparition 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 l'utilisation d'effets de bord, et en particulier l'utilisation de SET.

Conditionnelle

(COND (test1 expression1 ...)

...

(testn expressionn ...)

(T forme-de-rattrapage-d-erreur))

Economie

Réutiliser au mieux les objets existants.

26

Page 27: Le langage Lisp

Bruno Delb http://www.brunodelb.com Date : 12/02/2001

Le langage Lisp

27

Page 28: Le langage Lisp

Bruno Delb http://www.brunodelb.com Date : 12/02/2001

Le langage Lisp

Un 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 l'extension .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

Page 29: Le langage Lisp

Bruno Delb http://www.brunodelb.com Date : 12/02/2001

Le langage Lisp

Comment sélectionner un disque ou retourner la valeur du disque ?

?(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

Page 30: Le langage Lisp

Bruno Delb http://www.brunodelb.com Date : 12/02/2001

Le langage Lisp

La 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

Page 31: Le langage Lisp

Bruno Delb http://www.brunodelb.com Date : 12/02/2001

Le langage Lisp

La comparaison Prolog / Pascal

Quelles sont les caractéristiques de Prolog ?

On déclare tout ce qu'on sait sur un sujet, et Prolog se débrouille pour répondre aux questions.

Il dispose d'une mécanique générale de stockage et d'exploration d'une base de faits et de règles.

Quelles sont les caractéristiques de Pascal ?

C'est 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 n'importe quelle base de fait.

On peut effectuer l'exploration en fonction de n'importe 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 l'exploration 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

Page 32: Le langage Lisp

Bruno Delb http://www.brunodelb.com Date : 12/02/2001

Le langage Lisp

Les mécanismes d'évaluation

Comment est évaluée une S-Expression ?

Lorsque l'on soumet une s-expression (expression qui respecte la syntaxe Lisp) à l'interpré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 d'un symbole.

? facile= *** erreur: facile variable indéfinie. ***? (SETQ facile 2)= 2? facile= 2

Comment est évalué un nombre ?

Lorsque l'on soumet un nombre à l'évaluateur, il renvoit ce nombre. ? 8730= 8730

Comment est évaluée une chaîne ?

C'est la chaîne elle-même. ? "BONJOUR"= "BONJOUR"

Comment est évaluée une liste ?

Lorsque l'on soumet une liste à l'évaluateur il considère qu'il s'agit d'un 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

Page 33: Le langage Lisp

Bruno Delb http://www.brunodelb.com Date : 12/02/2001

Le langage Lisp

Les fonctions

Comment définir une fonction ?

On effectue la définition d'une 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 n'est 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

Page 34: Le langage Lisp

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

Page 35: Le langage Lisp

Bruno Delb http://www.brunodelb.com Date : 12/02/2001

Le langage Lisp

Comment 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

Page 36: Le langage Lisp

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 d'appel 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 qu'elles possédaient à l'appel de la fonction : c'est le mécanisme de la liaison dynamique.

(DE nom variable formes)

Définit une nouvelle fonction NOM se calculant comme (PROGN formes). Lors de l'appel, 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

Page 37: Le langage Lisp

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 d'arguments.

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 d'appel 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 n'existe dans la P-liste de symbole SYMBOLE. Sinon, retourne la valeur associée.

Comment effectuer des entrées et des sorties ?

(READ)

Lecture d'une expression (symbole, nombre ou liste) dans le flot d'entrée (clavier, fichier, ...) et la retourne.

(PRIN expressions)

Ecrit ses arguments et retourne le dernier comme valeur.

(TERPRI)

Saut à la ligne.

40

Page 38: Le langage Lisp

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 l'atome symbole ou nombre ayant l'argument 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 d'argument, retourne l'élément neutre de l'opération : 0 ou 1.

41

Page 39: Le langage Lisp

Bruno Delb http://www.brunodelb.com Date : 12/02/2001

Le langage Lisp

(- nombre)

Retourne l'opposé de l'argument.

(- 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 qu'une 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 l'EXPRESSION.

42

Page 40: Le langage Lisp

Bruno Delb http://www.brunodelb.com Date : 12/02/2001

Le langage Lisp

(OR expressions)

Evalue tour à tour les expressions. Dès qu'une 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 l'EXPRESSION.

Comment faire le reste ?

(LET (liaisons) formes)

Evalue FORMES dans l'environnement 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