(APPLY fonction liste_arg) evalue ses deux arguments, applique la fonction resultat de l'eval du 1er argument aux arg qui sont dans la liste resultat de l'eval du 2eme arg
(FUNCALL fonction arguments) identique a APPLY mais les arg ne sont pas dans une liste
exemple :
>(apply '+ '(20 80))
100
>(apply (car '(cons car cdr)) (cons '(do re) '((mi fa))))
((DO RE) MI FA)
NB : (apply fonction liste) équivaut à (eval (cons fonction liste1)) où liste 1 est la valeur de liste où chacun des éléments est quoté
lambda
É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.
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.
É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
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)))
écrire la fonction tête qui ramène la première colonnne d'une matrice
> (tete m1)
(1 4 7)
écrire la fonction reste qui ramène la matrice amputée de sa première
colonne
>(reste m1)
((2 3) (5 6) (8 9))
écrire la fonction transpose qui ramène la transposée d'une
matrice
> (transpose m1)
((1 4 7) (2 5 8) (3 6 9))
é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))
écrire une fonction qui fait le produit de 2 matrices
>(mat* m1 m2)
((13 33 41) (31 84 107) (49 135 173))