5. Listas, arrays y secuencias
Secciones
Ajustes de lectura
Ninguna voz para este idioma en este navegador.
Más voces
Código y términos técnicos en inglés
Desactivado: la voz de la página lo lee todo, sin pausa entre dos voces.
Ninguna voz para este idioma en este navegador.
Más voces
Más voces: Microsoft Edge ofrece voces naturales en línea, y Windows (Configuración › Hora e idioma › Voz), macOS y Android instalan otras.
C# tiene List<T>, arrays e IEnumerable<T>; Java, List<T>, arrays y Stream<T>. F# hace explícitos sus compromisos con tres familias.
| Tipo F# | Forma | Evaluación | Uso típico |
|---|---|---|---|
'T list |
lista enlazada inmutable | inmediata | recursión y transformaciones que añaden al inicio |
'T array |
almacenamiento contiguo mutable | inmediata | indexación, interop y buffers sensibles al rendimiento |
seq<'T> |
IEnumerable<T> |
perezosa | streaming y cálculo bajo demanda |
Referencias oficiales: List, Array y Seq.
Un pipeline, tres almacenamientos
Sección titulada «Un pipeline, tres almacenamientos»let openStrings = [ 40; 45; 50; 55; 59; 64 ]let upTwoFrets = openStrings |> List.map ((+) 2)
let mutablePitches = openStrings |> List.toArraymutablePitches[1] <- 46List.map devuelve una lista nueva. La asignación de un elemento del array usa <-. La conversión es explícita porque cambian el coste y la mutabilidad.
La pereza es observable
Sección titulada «La pereza es observable»let mutable evaluated = 0let chromatic = seq { for pitch in 40 .. 44 do evaluated <- evaluated + 1 yield pitch }Salida medida:
before Seq.take: 0first three: [40; 41; 42]after Seq.take: 3Crear la secuencia no ejecuta nada. Seq.take 3 |> Seq.toList solo solicita tres elementos. Volver a enumerarla repite los efectos; usa Seq.cache para reutilizar valores o materializa una fuente finita con Seq.toArray o Seq.toList.
map transforma, filter selecciona, choose combina un mapeo a Option con filtrado, fold transporta estado explícito y collect mapea y aplana una vez.
let playedFrets = [ Some 0; None; Some 7; Some 9 ]let played = playedFrets |> List.choose id// [0; 7; 9]Prefiere el módulo de la colección concreta. Seq.map acepta cualquier IEnumerable<T>, pero también vuelve perezosa una fuente inmediata y puede ocultar trabajo repetido.
Ejercicio
Sección titulada «Ejercicio»A partir de seis trastes opcionales, produce los tonos MIDI que suenan conservando el orden de cuerdas. Usa List.choose, sin acumulación mutable. Después reescribe con una secuencia e indica cuándo se evalúa.
Continúa con módulos y organización del proyecto.