En F#, las colecciones son estructuras de datos fundamentales que permiten almacenar y manipular conjuntos de elementos. En este tema, exploraremos tres tipos principales de colecciones: Listas, Arreglos y Secuencias. Cada una de estas colecciones tiene sus propias características y usos específicos.

Listas

Las listas en F# son colecciones inmutables y enlazadas de elementos del mismo tipo. Son muy utilizadas en programación funcional debido a su inmutabilidad y facilidad de uso.

Creación de Listas

let listaVacia = []
let listaConElementos = [1; 2; 3; 4; 5]

Operaciones Básicas con Listas

  • Acceso a Elementos: Puedes acceder a los elementos de una lista usando el operador de índice.
let primerElemento = listaConElementos.[0]  // 1
  • Agregar Elementos: Puedes agregar elementos al inicio de una lista usando el operador ::.
let nuevaLista = 0 :: listaConElementos  // [0; 1; 2; 3; 4; 5]
  • Concatenar Listas: Puedes concatenar dos listas usando el operador @.
let listaConcatenada = listaConElementos @ [6; 7; 8]  // [1; 2; 3; 4; 5; 6; 7; 8]

Ejemplo Práctico

let rec sumaLista lista =
    match lista with
    | [] -> 0
    | cabeza :: cola -> cabeza + sumaLista cola

let resultado = sumaLista listaConElementos  // 15

Arreglos

Los arreglos en F# son colecciones mutables de elementos del mismo tipo. Son útiles cuando necesitas modificar los elementos de la colección.

Creación de Arreglos

let arregloVacio = [| |]
let arregloConElementos = [| 1; 2; 3; 4; 5 |]

Operaciones Básicas con Arreglos

  • Acceso a Elementos: Puedes acceder a los elementos de un arreglo usando el operador de índice.
let primerElemento = arregloConElementos.[0]  // 1
  • Modificar Elementos: Puedes modificar los elementos de un arreglo usando el operador de índice.
arregloConElementos.[0] <- 10
  • Iterar sobre Arreglos: Puedes usar bucles for para iterar sobre los elementos de un arreglo.
for elemento in arregloConElementos do
    printfn "%d" elemento

Ejemplo Práctico

let duplicarArreglo (arreglo: int[]) =
    for i in 0 .. arreglo.Length - 1 do
        arreglo.[i] <- arreglo.[i] * 2

duplicarArreglo arregloConElementos

Secuencias

Las secuencias en F# son colecciones inmutables y perezosas de elementos del mismo tipo. Son útiles cuando trabajas con grandes conjuntos de datos o flujos de datos.

Creación de Secuencias

let secuenciaVacia = Seq.empty
let secuenciaConElementos = seq { 1 .. 5 }

Operaciones Básicas con Secuencias

  • Acceso a Elementos: Puedes acceder a los elementos de una secuencia usando funciones como Seq.nth.
let tercerElemento = Seq.nth 2 secuenciaConElementos  // 3
  • Transformar Secuencias: Puedes usar funciones como Seq.map para transformar los elementos de una secuencia.
let secuenciaDuplicada = Seq.map (fun x -> x * 2) secuenciaConElementos
  • Filtrar Secuencias: Puedes usar funciones como Seq.filter para filtrar los elementos de una secuencia.
let secuenciaFiltrada = Seq.filter (fun x -> x % 2 = 0) secuenciaConElementos

Ejemplo Práctico

let sumaSecuencia secuencia =
    secuencia |> Seq.sum

let resultado = sumaSecuencia secuenciaConElementos  // 15

Ejercicios Prácticos

Ejercicio 1: Suma de Elementos de una Lista

Escribe una función que sume todos los elementos de una lista de enteros.

let rec sumaLista lista =
    match lista with
    | [] -> 0
    | cabeza :: cola -> cabeza + sumaLista cola

// Prueba tu función
let lista = [1; 2; 3; 4; 5]
let resultado = sumaLista lista  // 15

Ejercicio 2: Duplicar Elementos de un Arreglo

Escribe una función que duplique cada elemento de un arreglo de enteros.

let duplicarArreglo (arreglo: int[]) =
    for i in 0 .. arreglo.Length - 1 do
        arreglo.[i] <- arreglo.[i] * 2

// Prueba tu función
let arreglo = [| 1; 2; 3; 4; 5 |]
duplicarArreglo arreglo
// arreglo ahora es [| 2; 4; 6; 8; 10 |]

Ejercicio 3: Filtrar Números Pares en una Secuencia

Escribe una función que filtre los números pares de una secuencia de enteros.

let filtrarPares secuencia =
    secuencia |> Seq.filter (fun x -> x % 2 = 0)

// Prueba tu función
let secuencia = seq { 1 .. 10 }
let resultado = filtrarPares secuencia
// resultado es seq [2; 4; 6; 8; 10]

Conclusión

En esta sección, hemos explorado las colecciones en F#, incluyendo listas, arreglos y secuencias. Cada tipo de colección tiene sus propias características y usos específicos. Las listas son inmutables y fáciles de usar en programación funcional, los arreglos son mutables y eficientes para modificaciones, y las secuencias son perezosas y útiles para trabajar con grandes conjuntos de datos. Con estos conocimientos, estás preparado para manejar colecciones de datos en F# de manera efectiva.

Curso de Programación en F#

Módulo 1: Introducción a F#

Módulo 2: Conceptos Básicos

Módulo 3: Programación Funcional

Módulo 4: Estructuras de Datos Avanzadas

Módulo 5: Programación Orientada a Objetos en F#

Módulo 6: Programación Asíncrona y Paralela

Módulo 7: Acceso y Manipulación de Datos

Módulo 8: Pruebas y Depuración

Módulo 9: Temas Avanzados

Módulo 10: Aplicaciones Prácticas

© Copyright 2024. Todos los derechos reservados