5. Listes, tableaux et séquences
Sections
Réglages de lecture
Aucune voix pour cette langue dans ce navigateur.
Plus de voix
Code et termes techniques en anglais
Désactivé : la voix de la page lit tout, sans pause entre deux voix.
Aucune voix pour cette langue dans ce navigateur.
Plus de voix
D’autres voix : Microsoft Edge propose des voix naturelles en ligne, et Windows (Paramètres › Heure et langue › Voix), macOS et Android en installent d’autres.
C# possède List<T>, les tableaux et IEnumerable<T> ; Java, List<T>, les tableaux et Stream<T>. F# rend leurs compromis explicites avec trois familles.
| Type F# | Forme | Évaluation | Usage typique |
|---|---|---|---|
'T list |
liste chaînée immuable | immédiate | récursion et transformations qui ajoutent en tête |
'T array |
stockage contigu mutable | immédiate | indexation, interop et buffers performants |
seq<'T> |
IEnumerable<T> |
paresseuse | flux et calcul à la demande |
Références officielles : List, Array et Seq.
Un pipeline, trois stockages
Section intitulée « Un pipeline, trois stockages »Extrait de l05_collections.fsx :
let openStrings = [ 40; 45; 50; 55; 59; 64 ]let upTwoFrets = openStrings |> List.map ((+) 2)
let mutablePitches = openStrings |> List.toArraymutablePitches[1] <- 46List.map renvoie une nouvelle liste. L’affectation dans un tableau utilise <-. La conversion est explicite parce que le coût et la mutabilité changent.
La paresse est observable
Section intitulée « La paresse est observable »let mutable evaluated = 0let chromatic = seq { for pitch in 40 .. 44 do evaluated <- evaluated + 1 yield pitch }Sortie mesurée :
before Seq.take: 0first three: [40; 41; 42]after Seq.take: 3Créer la séquence n’exécute rien. Seq.take 3 |> Seq.toList ne tire que trois éléments. Une nouvelle énumération répète les effets ; utilise Seq.cache pour réutiliser les valeurs, ou matérialise une source finie avec Seq.toArray ou Seq.toList.
map transforme, filter sélectionne, choose combine un mapping vers Option et le filtrage, fold transporte un état explicite, et collect mappe puis aplatit une fois.
let playedFrets = [ Some 0; None; Some 7; Some 9 ]let played = playedFrets |> List.choose id// [0; 7; 9]Préfère le module de la collection concrète. Seq.map accepte tout IEnumerable<T>, mais rend aussi une source immédiate paresseuse et peut masquer un travail répété.
Exercice
Section intitulée « Exercice »À partir de six frettes optionnelles, produis les hauteurs MIDI jouées en conservant l’ordre des cordes. Utilise List.choose, sans accumulation mutable. Réécris ensuite avec une séquence et indique quand elle est évaluée.
Continue avec les modules et l’organisation du projet.