TP3 : Compléments sur LISP

  1. Écrire la fonction (MC f  l) qui applique la fonction f successivement à tous les éléments de la liste l et en fait une liste.
    En lisp cette fonction existe déjà et s'appelle mapcar.
  2. Exemple : utiliser mapcar pour ajouter 5 à tous les éléments d'une liste d'entier.
    >(mapcar ... '(2 6 3 5))
    (7 11 8 10)
    Remarque : pour ne pas avoir à nommer la fonction qui ajoute 5 à un élément, on peut utiliser une lambda expression.
  3. Écrire une fonction qui évalue une expression donnée sous forme infixée complètement parenthésée. L'expression infixée est complètement parenthésée et ne contient que des operateurs binaires donc de la forme (OPER1 op OPER2) où op est un opérateur binaire on accède donc à op par le cadr de l'expression infixée.
    > (eval_infix '((2 - 3) + ((5 * 6) - 1)))
    28
  4. Une matrice de dimension (n, p). M= (xij), i appartenant à [1..n] étant l'indice de la ligne et j appartenant à [1..p] étant l'indice de la colonne, peut être représentée en LISP par :

    ( (x11 ... x1j ... x1p) ... (xi1 ... xij... xip) ... (xn1 ... xnj ... xnp))

    exemple: (setq m1 '((1 2 3) (4 5 6) (7 8 9)) m2 '((1 5 9) (3 8 7) (2 4 6)))
    1. écrire la fonction tête qui ramène la première colonnne d'une matrice
      > (tete m1)
      (1 4 7)
    2. écrire la fonction reste qui ramène la matrice amputée de sa première colonne
      >(reste m1)
      ((2 3) (5 6) (8 9))
    3. écrire la fonction transpose qui ramène la transposée d'une matrice
      > (transpose m1)
      ((1 4 7) (2 5 8) (3 6 9))
    4. écrire une fonction (matcar op m1 m2) qui applique l'opérateur binaire op terme à terme sur les 2 matrices m1 et m2
      >(matcar '+ m1 m2)
      ((2 7 12) (7 13 13) (9 12 15))
    5. écrire une fonction qui fait le produit de 2 matrices
      >(mat* m1 m2)
      ((13 33 41) (31 84 107) (49 135 173))


Florence Bannay, Béatrice Duval
15-11-2000