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}

Irene DURAND
2011-10-14