SlideShare une entreprise Scribd logo
1  sur  40
Bruno Delb                            http://www.brunodelb.com                         Date : 12/02/2001

                                                 Le langage Lisp




                                                Sommaire

DÉ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 ?.........................................................................................6

L’É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 ?...................................................................................8
LES 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
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 D'EXPRESSION [MLAMBDA]..........................................................................19
  DÉFINITION D'EXPRESSION [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 D'APPEL [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 D'ATOME [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 d'accesseurs.........................................................................................26
    Ordres de test....................................................................................................26
    Séparation des pouvoirs......................................................................................26
    Proscription des effets de bord.............................................................................26
    Conditionnelle....................................................................................................26
    Economie..........................................................................................................27
UN 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
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 ?........................30
LA COMPARAISON PASCAL / LISP........................................................................31
  FACTORIELLES..........................................................................................................31
LA 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 ?....................................................33
LES 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 ?................................................................................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 ?.........................................................................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
Bruno Delb                            http://www.brunodelb.com                       Date : 12/02/2001

                                              Le langage Lisp

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


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

                               Le langage Lisp

    De plus, la liste vide () est identifiée à l'atome 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)
    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
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
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
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
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 LISPCOMMANDEARITHMETIQUE [-] (BIS)
      (- nombre1 ... nombren)
      Retourne nombre1 - (nombre2 + ... + nombren)




                                                          10
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
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
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
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
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
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
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)
      NOMBRES
      NIL



> [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
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)
      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
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
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
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
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-LIGNE
     PRINT-SAUTE-A-LA-LIGNE
     PRINT-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
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 )
     MERCI
     T
     ?EXP
     (CETTE LISTE VA ETRE LUE)




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




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

                                        Le langage Lisp

Multiplication [TIMES]

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


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

                           Le langage Lisp

Economie
  Réutiliser au mieux les objets existants.




                                     27
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
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
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
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
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
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
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
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
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
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
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
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
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

Contenu connexe

Tendances

Sujet Brevet 2014
Sujet Brevet 2014Sujet Brevet 2014
Sujet Brevet 2014mlaugel
 
TFE - Netflix, le géant qui pourrait changer la TV ?
TFE - Netflix, le géant qui pourrait changer la TV ?TFE - Netflix, le géant qui pourrait changer la TV ?
TFE - Netflix, le géant qui pourrait changer la TV ?MelvinFernandez20
 
EyeSight Game Design Document
EyeSight Game Design DocumentEyeSight Game Design Document
EyeSight Game Design DocumentRonan jeanmichel
 
Wildwood Lodge 2013 Brochure
Wildwood Lodge 2013 BrochureWildwood Lodge 2013 Brochure
Wildwood Lodge 2013 Brochuredarjmich
 
Comptes nationaux des pays de l'ocde comptes des administrations publiques 2011
Comptes nationaux des pays de l'ocde comptes des administrations publiques 2011Comptes nationaux des pays de l'ocde comptes des administrations publiques 2011
Comptes nationaux des pays de l'ocde comptes des administrations publiques 2011Ministère de l'Économie et des Finances
 
Brevet blanc mai 2013 v2
Brevet blanc mai 2013 v2Brevet blanc mai 2013 v2
Brevet blanc mai 2013 v2Céline Langlet
 
Eurocode : Structures Métalliques Et En Béton Armé, Conception Et Calcul Des ...
Eurocode : Structures Métalliques Et En Béton Armé, Conception Et Calcul Des ...Eurocode : Structures Métalliques Et En Béton Armé, Conception Et Calcul Des ...
Eurocode : Structures Métalliques Et En Béton Armé, Conception Et Calcul Des ...SOUISSI Anis
 
Trouver un Emploi à plus de 45 ans
Trouver un Emploi à plus de 45 ansTrouver un Emploi à plus de 45 ans
Trouver un Emploi à plus de 45 ansREALIZ
 
Fiches mission1 lancement ElectrYc
Fiches mission1 lancement ElectrYcFiches mission1 lancement ElectrYc
Fiches mission1 lancement ElectrYcTUBÀ
 
Unit 1 exam paper jan 2011
Unit 1 exam paper jan 2011Unit 1 exam paper jan 2011
Unit 1 exam paper jan 2011Sally Longford
 
The holy bible_in_bulgarian
The holy bible_in_bulgarianThe holy bible_in_bulgarian
The holy bible_in_bulgarianWorldBibles
 

Tendances (13)

Sujet Brevet 2014
Sujet Brevet 2014Sujet Brevet 2014
Sujet Brevet 2014
 
TFE - Netflix, le géant qui pourrait changer la TV ?
TFE - Netflix, le géant qui pourrait changer la TV ?TFE - Netflix, le géant qui pourrait changer la TV ?
TFE - Netflix, le géant qui pourrait changer la TV ?
 
EyeSight Game Design Document
EyeSight Game Design DocumentEyeSight Game Design Document
EyeSight Game Design Document
 
Wildwood Lodge 2013 Brochure
Wildwood Lodge 2013 BrochureWildwood Lodge 2013 Brochure
Wildwood Lodge 2013 Brochure
 
Comptes nationaux des pays de l'ocde comptes des administrations publiques 2011
Comptes nationaux des pays de l'ocde comptes des administrations publiques 2011Comptes nationaux des pays de l'ocde comptes des administrations publiques 2011
Comptes nationaux des pays de l'ocde comptes des administrations publiques 2011
 
Brevet blanc mai 2013 v2
Brevet blanc mai 2013 v2Brevet blanc mai 2013 v2
Brevet blanc mai 2013 v2
 
Eurocode : Structures Métalliques Et En Béton Armé, Conception Et Calcul Des ...
Eurocode : Structures Métalliques Et En Béton Armé, Conception Et Calcul Des ...Eurocode : Structures Métalliques Et En Béton Armé, Conception Et Calcul Des ...
Eurocode : Structures Métalliques Et En Béton Armé, Conception Et Calcul Des ...
 
Jean jullien
Jean jullienJean jullien
Jean jullien
 
R13 4451
R13 4451R13 4451
R13 4451
 
Trouver un Emploi à plus de 45 ans
Trouver un Emploi à plus de 45 ansTrouver un Emploi à plus de 45 ans
Trouver un Emploi à plus de 45 ans
 
Fiches mission1 lancement ElectrYc
Fiches mission1 lancement ElectrYcFiches mission1 lancement ElectrYc
Fiches mission1 lancement ElectrYc
 
Unit 1 exam paper jan 2011
Unit 1 exam paper jan 2011Unit 1 exam paper jan 2011
Unit 1 exam paper jan 2011
 
The holy bible_in_bulgarian
The holy bible_in_bulgarianThe holy bible_in_bulgarian
The holy bible_in_bulgarian
 

En vedette

Programming For Special Needs My Presentation
Programming For Special Needs My PresentationProgramming For Special Needs My Presentation
Programming For Special Needs My PresentationMs.SHAFAQ BHAT
 
Leervoorkeuren en denkgewoonten
Leervoorkeuren en denkgewoontenLeervoorkeuren en denkgewoonten
Leervoorkeuren en denkgewoontenanitakluit
 
Android Lab Test : Managing sounds with SoundPool (english)
Android Lab Test : Managing sounds with SoundPool (english)Android Lab Test : Managing sounds with SoundPool (english)
Android Lab Test : Managing sounds with SoundPool (english)Bruno Delb
 
Android Lab Test : L'installation d'une application en Java (français)
Android Lab Test : L'installation d'une application en Java (français)Android Lab Test : L'installation d'une application en Java (français)
Android Lab Test : L'installation d'une application en Java (français)Bruno Delb
 
Android Lab Test : Les vues, Gallery (français)
Android Lab Test : Les vues, Gallery (français)Android Lab Test : Les vues, Gallery (français)
Android Lab Test : Les vues, Gallery (français)Bruno Delb
 
Android Lab Test : Les appels téléphoniques (français)
Android Lab Test : Les appels téléphoniques (français)Android Lab Test : Les appels téléphoniques (français)
Android Lab Test : Les appels téléphoniques (français)Bruno Delb
 
Placed Students
Placed StudentsPlaced Students
Placed Studentsmayankch02
 

En vedette (8)

Programming For Special Needs My Presentation
Programming For Special Needs My PresentationProgramming For Special Needs My Presentation
Programming For Special Needs My Presentation
 
Leervoorkeuren en denkgewoonten
Leervoorkeuren en denkgewoontenLeervoorkeuren en denkgewoonten
Leervoorkeuren en denkgewoonten
 
Android Lab Test : Managing sounds with SoundPool (english)
Android Lab Test : Managing sounds with SoundPool (english)Android Lab Test : Managing sounds with SoundPool (english)
Android Lab Test : Managing sounds with SoundPool (english)
 
My Preschool Years
My Preschool YearsMy Preschool Years
My Preschool Years
 
Android Lab Test : L'installation d'une application en Java (français)
Android Lab Test : L'installation d'une application en Java (français)Android Lab Test : L'installation d'une application en Java (français)
Android Lab Test : L'installation d'une application en Java (français)
 
Android Lab Test : Les vues, Gallery (français)
Android Lab Test : Les vues, Gallery (français)Android Lab Test : Les vues, Gallery (français)
Android Lab Test : Les vues, Gallery (français)
 
Android Lab Test : Les appels téléphoniques (français)
Android Lab Test : Les appels téléphoniques (français)Android Lab Test : Les appels téléphoniques (français)
Android Lab Test : Les appels téléphoniques (français)
 
Placed Students
Placed StudentsPlaced Students
Placed Students
 

Similaire à Le langage Lisp

La base de données Oracle
La base de données OracleLa base de données Oracle
La base de données OracleBruno Delb
 
Les réseaux locaux
Les réseaux locauxLes réseaux locaux
Les réseaux locauxBruno Delb
 
Livre blanc de J2ME
Livre blanc de J2MELivre blanc de J2ME
Livre blanc de J2MEBruno Delb
 
Fiche 11 le recyclage des briques alimentaires
Fiche 11 le recyclage des briques alimentairesFiche 11 le recyclage des briques alimentaires
Fiche 11 le recyclage des briques alimentairesalliance-carton-nature
 
Dossier De Conception Lena Labyrinthe
Dossier De Conception Lena LabyrintheDossier De Conception Lena Labyrinthe
Dossier De Conception Lena Labyrinthegobz
 
Les artistes du Centre culturel Jovence#5 - Louvigné du Désert
Les artistes du Centre culturel Jovence#5 -  Louvigné du DésertLes artistes du Centre culturel Jovence#5 -  Louvigné du Désert
Les artistes du Centre culturel Jovence#5 - Louvigné du DésertCentre Culturel Jovence
 
Gestion Des Immobilisations 2017 - ISMAG RABAT - DKIR ZINE ELABIDINE
Gestion Des Immobilisations 2017 - ISMAG RABAT - DKIR ZINE ELABIDINEGestion Des Immobilisations 2017 - ISMAG RABAT - DKIR ZINE ELABIDINE
Gestion Des Immobilisations 2017 - ISMAG RABAT - DKIR ZINE ELABIDINEZINE EL ABIDINE DKIR
 
Fiche 7 les étapes de fabrication d'une brique alimentaire
Fiche 7 les étapes de fabrication d'une brique alimentaireFiche 7 les étapes de fabrication d'une brique alimentaire
Fiche 7 les étapes de fabrication d'une brique alimentairealliance-carton-nature
 
Documentation AnkiDroid/Anki en français
Documentation AnkiDroid/Anki en françaisDocumentation AnkiDroid/Anki en français
Documentation AnkiDroid/Anki en françaisNicolas Raoul
 
Guide d’étude d'impacts
Guide d’étude d'impactsGuide d’étude d'impacts
Guide d’étude d'impactssmemanager
 
ICET 2011 PowerPoint workshop - handout
ICET 2011 PowerPoint workshop - handoutICET 2011 PowerPoint workshop - handout
ICET 2011 PowerPoint workshop - handoutj.lodge
 
Les bases fondamentales du langage transact sql
Les bases fondamentales du langage transact sqlLes bases fondamentales du langage transact sql
Les bases fondamentales du langage transact sqlZineb Meryem
 
Statistique descriptive et lois de probabilités
Statistique descriptive et lois de probabilitésStatistique descriptive et lois de probabilités
Statistique descriptive et lois de probabilitésYoucef63000
 
Comment bien utiliser Linkedin
Comment bien utiliser LinkedinComment bien utiliser Linkedin
Comment bien utiliser LinkedinMarketingZ
 
devoir de contrôle N°2
devoir de contrôle N°2devoir de contrôle N°2
devoir de contrôle N°2Hichem Kemali
 

Similaire à Le langage Lisp (20)

La base de données Oracle
La base de données OracleLa base de données Oracle
La base de données Oracle
 
Complet
CompletComplet
Complet
 
Le PC
Le PCLe PC
Le PC
 
Les réseaux locaux
Les réseaux locauxLes réseaux locaux
Les réseaux locaux
 
Livre blanc de J2ME
Livre blanc de J2MELivre blanc de J2ME
Livre blanc de J2ME
 
Fiche 11 le recyclage des briques alimentaires
Fiche 11 le recyclage des briques alimentairesFiche 11 le recyclage des briques alimentaires
Fiche 11 le recyclage des briques alimentaires
 
Dossier De Conception Lena Labyrinthe
Dossier De Conception Lena LabyrintheDossier De Conception Lena Labyrinthe
Dossier De Conception Lena Labyrinthe
 
Les artistes du Centre culturel Jovence#5 - Louvigné du Désert
Les artistes du Centre culturel Jovence#5 -  Louvigné du DésertLes artistes du Centre culturel Jovence#5 -  Louvigné du Désert
Les artistes du Centre culturel Jovence#5 - Louvigné du Désert
 
Gestion Des Immobilisations 2017 - ISMAG RABAT - DKIR ZINE ELABIDINE
Gestion Des Immobilisations 2017 - ISMAG RABAT - DKIR ZINE ELABIDINEGestion Des Immobilisations 2017 - ISMAG RABAT - DKIR ZINE ELABIDINE
Gestion Des Immobilisations 2017 - ISMAG RABAT - DKIR ZINE ELABIDINE
 
VAX
VAXVAX
VAX
 
Fiche 7 les étapes de fabrication d'une brique alimentaire
Fiche 7 les étapes de fabrication d'une brique alimentaireFiche 7 les étapes de fabrication d'une brique alimentaire
Fiche 7 les étapes de fabrication d'une brique alimentaire
 
Documentation AnkiDroid/Anki en français
Documentation AnkiDroid/Anki en françaisDocumentation AnkiDroid/Anki en français
Documentation AnkiDroid/Anki en français
 
Guide d’étude d'impacts
Guide d’étude d'impactsGuide d’étude d'impacts
Guide d’étude d'impacts
 
ICET 2011 PowerPoint workshop - handout
ICET 2011 PowerPoint workshop - handoutICET 2011 PowerPoint workshop - handout
ICET 2011 PowerPoint workshop - handout
 
Les bases fondamentales du langage transact sql
Les bases fondamentales du langage transact sqlLes bases fondamentales du langage transact sql
Les bases fondamentales du langage transact sql
 
Access 2007
Access 2007Access 2007
Access 2007
 
Iter - Compte rendu de veille stratégique février à juillet 2011
Iter - Compte rendu de veille stratégique février à juillet 2011Iter - Compte rendu de veille stratégique février à juillet 2011
Iter - Compte rendu de veille stratégique février à juillet 2011
 
Statistique descriptive et lois de probabilités
Statistique descriptive et lois de probabilitésStatistique descriptive et lois de probabilités
Statistique descriptive et lois de probabilités
 
Comment bien utiliser Linkedin
Comment bien utiliser LinkedinComment bien utiliser Linkedin
Comment bien utiliser Linkedin
 
devoir de contrôle N°2
devoir de contrôle N°2devoir de contrôle N°2
devoir de contrôle N°2
 

Plus de Bruno Delb

Introduction to Swift (tutorial)
Introduction to Swift (tutorial)Introduction to Swift (tutorial)
Introduction to Swift (tutorial)Bruno Delb
 
Android Lab Test : Storage of data with SharedPreferences (english)
Android Lab Test : Storage of data with SharedPreferences (english)Android Lab Test : Storage of data with SharedPreferences (english)
Android Lab Test : Storage of data with SharedPreferences (english)Bruno Delb
 
Android Lab Test : Using the sensor gyroscope (english)
Android Lab Test : Using the sensor gyroscope (english)Android Lab Test : Using the sensor gyroscope (english)
Android Lab Test : Using the sensor gyroscope (english)Bruno Delb
 
Android Lab Test : Using the network with HTTP (english)
Android Lab Test : Using the network with HTTP (english)Android Lab Test : Using the network with HTTP (english)
Android Lab Test : Using the network with HTTP (english)Bruno Delb
 
Android Lab Test : Using the text-to-speech (english)
Android Lab Test : Using the text-to-speech (english)Android Lab Test : Using the text-to-speech (english)
Android Lab Test : Using the text-to-speech (english)Bruno Delb
 
Android Lab Test : Reading the foot file list (english)
Android Lab Test : Reading the foot file list (english)Android Lab Test : Reading the foot file list (english)
Android Lab Test : Reading the foot file list (english)Bruno Delb
 
Android Lab Test : Creating a menu dynamically (english)
Android Lab Test : Creating a menu dynamically (english)Android Lab Test : Creating a menu dynamically (english)
Android Lab Test : Creating a menu dynamically (english)Bruno Delb
 
Android Lab Test : Creating a dialog Yes/No (english)
Android Lab Test : Creating a dialog Yes/No (english)Android Lab Test : Creating a dialog Yes/No (english)
Android Lab Test : Creating a dialog Yes/No (english)Bruno Delb
 
Android Lab Test : The styles of views (english)
Android Lab Test : The styles of views (english)Android Lab Test : The styles of views (english)
Android Lab Test : The styles of views (english)Bruno Delb
 
Android Lab Test : Creating a menu context (english)
Android Lab Test : Creating a menu context (english)Android Lab Test : Creating a menu context (english)
Android Lab Test : Creating a menu context (english)Bruno Delb
 
Android Lab Test : Using the camera preview (english)
Android Lab Test : Using the camera preview (english)Android Lab Test : Using the camera preview (english)
Android Lab Test : Using the camera preview (english)Bruno Delb
 
Android Lab Test : The views, the Gallery (english)
Android Lab Test : The views, the Gallery (english)Android Lab Test : The views, the Gallery (english)
Android Lab Test : The views, the Gallery (english)Bruno Delb
 
Android Lab Test : Using the WIFI (english)
Android Lab Test : Using the WIFI (english)Android Lab Test : Using the WIFI (english)
Android Lab Test : Using the WIFI (english)Bruno Delb
 
Android Lab Test : Managing the telephone calls (english)
Android Lab Test : Managing the telephone calls (english)Android Lab Test : Managing the telephone calls (english)
Android Lab Test : Managing the telephone calls (english)Bruno Delb
 
Android Lab Test : Reading the SMS-inbox (english)
Android Lab Test : Reading the SMS-inbox (english)Android Lab Test : Reading the SMS-inbox (english)
Android Lab Test : Reading the SMS-inbox (english)Bruno Delb
 
Android Lab Test : Installation of application in Java (english)
Android Lab Test : Installation of application in Java (english)Android Lab Test : Installation of application in Java (english)
Android Lab Test : Installation of application in Java (english)Bruno Delb
 
Android Lab Test : Ecrire un texte sur le canevas (français)
Android Lab Test : Ecrire un texte sur le canevas (français)Android Lab Test : Ecrire un texte sur le canevas (français)
Android Lab Test : Ecrire un texte sur le canevas (français)Bruno Delb
 
Android Lab Test : La connectivité réseau avec HTTP (français)
Android Lab Test : La connectivité réseau avec HTTP (français)Android Lab Test : La connectivité réseau avec HTTP (français)
Android Lab Test : La connectivité réseau avec HTTP (français)Bruno Delb
 
Android Lab Test : Le capteur gyroscope (français)
Android Lab Test : Le capteur gyroscope (français)Android Lab Test : Le capteur gyroscope (français)
Android Lab Test : Le capteur gyroscope (français)Bruno Delb
 
Android Lab Test : Les threads (français)
Android Lab Test : Les threads (français)Android Lab Test : Les threads (français)
Android Lab Test : Les threads (français)Bruno Delb
 

Plus de Bruno Delb (20)

Introduction to Swift (tutorial)
Introduction to Swift (tutorial)Introduction to Swift (tutorial)
Introduction to Swift (tutorial)
 
Android Lab Test : Storage of data with SharedPreferences (english)
Android Lab Test : Storage of data with SharedPreferences (english)Android Lab Test : Storage of data with SharedPreferences (english)
Android Lab Test : Storage of data with SharedPreferences (english)
 
Android Lab Test : Using the sensor gyroscope (english)
Android Lab Test : Using the sensor gyroscope (english)Android Lab Test : Using the sensor gyroscope (english)
Android Lab Test : Using the sensor gyroscope (english)
 
Android Lab Test : Using the network with HTTP (english)
Android Lab Test : Using the network with HTTP (english)Android Lab Test : Using the network with HTTP (english)
Android Lab Test : Using the network with HTTP (english)
 
Android Lab Test : Using the text-to-speech (english)
Android Lab Test : Using the text-to-speech (english)Android Lab Test : Using the text-to-speech (english)
Android Lab Test : Using the text-to-speech (english)
 
Android Lab Test : Reading the foot file list (english)
Android Lab Test : Reading the foot file list (english)Android Lab Test : Reading the foot file list (english)
Android Lab Test : Reading the foot file list (english)
 
Android Lab Test : Creating a menu dynamically (english)
Android Lab Test : Creating a menu dynamically (english)Android Lab Test : Creating a menu dynamically (english)
Android Lab Test : Creating a menu dynamically (english)
 
Android Lab Test : Creating a dialog Yes/No (english)
Android Lab Test : Creating a dialog Yes/No (english)Android Lab Test : Creating a dialog Yes/No (english)
Android Lab Test : Creating a dialog Yes/No (english)
 
Android Lab Test : The styles of views (english)
Android Lab Test : The styles of views (english)Android Lab Test : The styles of views (english)
Android Lab Test : The styles of views (english)
 
Android Lab Test : Creating a menu context (english)
Android Lab Test : Creating a menu context (english)Android Lab Test : Creating a menu context (english)
Android Lab Test : Creating a menu context (english)
 
Android Lab Test : Using the camera preview (english)
Android Lab Test : Using the camera preview (english)Android Lab Test : Using the camera preview (english)
Android Lab Test : Using the camera preview (english)
 
Android Lab Test : The views, the Gallery (english)
Android Lab Test : The views, the Gallery (english)Android Lab Test : The views, the Gallery (english)
Android Lab Test : The views, the Gallery (english)
 
Android Lab Test : Using the WIFI (english)
Android Lab Test : Using the WIFI (english)Android Lab Test : Using the WIFI (english)
Android Lab Test : Using the WIFI (english)
 
Android Lab Test : Managing the telephone calls (english)
Android Lab Test : Managing the telephone calls (english)Android Lab Test : Managing the telephone calls (english)
Android Lab Test : Managing the telephone calls (english)
 
Android Lab Test : Reading the SMS-inbox (english)
Android Lab Test : Reading the SMS-inbox (english)Android Lab Test : Reading the SMS-inbox (english)
Android Lab Test : Reading the SMS-inbox (english)
 
Android Lab Test : Installation of application in Java (english)
Android Lab Test : Installation of application in Java (english)Android Lab Test : Installation of application in Java (english)
Android Lab Test : Installation of application in Java (english)
 
Android Lab Test : Ecrire un texte sur le canevas (français)
Android Lab Test : Ecrire un texte sur le canevas (français)Android Lab Test : Ecrire un texte sur le canevas (français)
Android Lab Test : Ecrire un texte sur le canevas (français)
 
Android Lab Test : La connectivité réseau avec HTTP (français)
Android Lab Test : La connectivité réseau avec HTTP (français)Android Lab Test : La connectivité réseau avec HTTP (français)
Android Lab Test : La connectivité réseau avec HTTP (français)
 
Android Lab Test : Le capteur gyroscope (français)
Android Lab Test : Le capteur gyroscope (français)Android Lab Test : Le capteur gyroscope (français)
Android Lab Test : Le capteur gyroscope (français)
 
Android Lab Test : Les threads (français)
Android Lab Test : Les threads (français)Android Lab Test : Les threads (français)
Android Lab Test : Les threads (français)
 

Le langage Lisp

  • 1. Bruno Delb http://www.brunodelb.com Date : 12/02/2001 Le langage Lisp Sommaire DÉ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 ?.........................................................................................6 L’É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 ?...................................................................................8 LES 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 D'EXPRESSION [MLAMBDA]..........................................................................19 DÉFINITION D'EXPRESSION [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 D'APPEL [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 D'ATOME [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 d'accesseurs.........................................................................................26 Ordres de test....................................................................................................26 Séparation des pouvoirs......................................................................................26 Proscription des effets de bord.............................................................................26 Conditionnelle....................................................................................................26 Economie..........................................................................................................27 UN 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 ?........................30 LA COMPARAISON PASCAL / LISP........................................................................31 FACTORIELLES..........................................................................................................31 LA 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 ?....................................................33 LES 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 ?................................................................................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 ?.........................................................................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é)......................................................................................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 (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
  • 5. 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. 5
  • 6. Bruno Delb http://www.brunodelb.com Date : 12/02/2001 Le langage Lisp De plus, la liste vide () est identifiée à l'atome 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) 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
  • 7. 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
  • 8. 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
  • 9. 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
  • 10. 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 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 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
  • 12. 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
  • 13. 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
  • 14. 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
  • 15. 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
  • 16. 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
  • 17. 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) NOMBRES NIL > [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
  • 18. 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) 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 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
  • 20. 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
  • 21. 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
  • 22. 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-LIGNE PRINT-SAUTE-A-LA-LIGNE PRINT-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
  • 23. 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 ) MERCI T ?EXP (CETTE LISTE VA ETRE LUE) 23
  • 24. 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
  • 25. 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. 25
  • 26. Bruno Delb http://www.brunodelb.com Date : 12/02/2001 Le langage Lisp Multiplication [TIMES] (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)) 26
  • 27. Bruno Delb http://www.brunodelb.com Date : 12/02/2001 Le langage Lisp Economie Réutiliser au mieux les objets existants. 27
  • 28. 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
  • 29. 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
  • 30. 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
  • 31. 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
  • 32. 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
  • 33. 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
  • 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 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
  • 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 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
  • 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 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
  • 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 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
  • 39. 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
  • 40. 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