next up previous contents index
Next: mapl Up: Fonctions d'application Previous: mapcar   Contents   Index

mapcan

La fonction mapcan est similaire à mapcar et mapc. Elle applique la fonction à chaque élément de la liste, puis la fonction nconc (voir section 8.5.4) aux résultats de ces applications. Normalement, le résultat de chaque application est une liste et ces listes sont concaténées desctructivement pour obtenir la valeur de l'appel à mapcan. Exemple :

* (defparameter *l* (list (list 1 2) (list 3 4) (list 5 6)))

*L*
* (mapcan #'cdr *l*)

(2 4 6)
* *l*

((1 2 4 6) (3 4 6) (5 6))
*

Ce résultat nécessite une explication. La figure 8.8 présente la structure initiale de *l* passée à mapcan.

Figure 8.8: Fonctionnement de mapcan
\begin{figure}
\begin{center}
\input mapcan1.pstex_t
\end{center}\end{figure}

Les trois valeurs obtenues après application de cdr sur chaque élément de *l* sont indiquées dans la figure 8.9.

Figure 8.9: Fonctionnement de mapcan
\begin{figure}
\begin{center}
\input mapcan2.pstex_t
\end{center}\end{figure}

La figure 8.10 montre la même structure que la figure 8.9, sauf que les cellules ont été réorganisées pour mettre en évidence les trois listes (chacune d'un seul élément) obtenues après application de cdr sur chaque élément de *l*.

Figure 8.10: Fonctionnement de mapcan
\begin{figure}
\begin{center}
\input mapcan3.pstex_t
\end{center}\end{figure}

La figure 8.11 montre le résultat de la concaténation de ces trois listes avec mapcan. Il est maintenant clair que le premier élément de *l* est désormais la liste (1 2 4 6), le deuxième est la liste (3 4 6) et le dernier est la liste (5 6).

Figure 8.11: Fonctionnement de mapcan
\begin{figure}
\begin{center}
\input mapcan4.pstex_t
\end{center}\end{figure}


next up previous contents index
Next: mapl Up: Fonctions d'application Previous: mapcar   Contents   Index
Robert STRANDH
2001-09-28