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
Operaciones Básicas con Listas
- Acceso a Elementos: Puedes acceder a los elementos de una lista usando el operador de índice.
- Agregar Elementos: Puedes agregar elementos al inicio de una lista usando el operador
::.
- Concatenar Listas: Puedes concatenar dos listas usando el operador
@.
Ejemplo Práctico
let rec sumaLista lista =
match lista with
| [] -> 0
| cabeza :: cola -> cabeza + sumaLista cola
let resultado = sumaLista listaConElementos // 15Arreglos
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
Operaciones Básicas con Arreglos
- Acceso a Elementos: Puedes acceder a los elementos de un arreglo usando el operador de índice.
- Modificar Elementos: Puedes modificar los elementos de un arreglo usando el operador de índice.
- Iterar sobre Arreglos: Puedes usar bucles
forpara iterar sobre los elementos de un arreglo.
Ejemplo Práctico
let duplicarArreglo (arreglo: int[]) =
for i in 0 .. arreglo.Length - 1 do
arreglo.[i] <- arreglo.[i] * 2
duplicarArreglo arregloConElementosSecuencias
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
Operaciones Básicas con Secuencias
- Acceso a Elementos: Puedes acceder a los elementos de una secuencia usando funciones como
Seq.nth.
- Transformar Secuencias: Puedes usar funciones como
Seq.mappara transformar los elementos de una secuencia.
- Filtrar Secuencias: Puedes usar funciones como
Seq.filterpara filtrar los elementos de una secuencia.
Ejemplo Práctico
let sumaSecuencia secuencia =
secuencia |> Seq.sum
let resultado = sumaSecuencia secuenciaConElementos // 15Ejercicios 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 // 15Ejercicio 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
- Tipos de Datos y Variables
- Funciones e Inmutabilidad
- Coincidencia de Patrones
- Colecciones: Listas, Arreglos y Secuencias
Módulo 3: Programación Funcional
- Funciones de Orden Superior
- Recursión
- Encadenamiento y Composición
- Aplicación Parcial y Currificación
Módulo 4: Estructuras de Datos Avanzadas
Módulo 5: Programación Orientada a Objetos en F#
- Clases y Objetos
- Herencia e Interfaces
- Mezclando Programación Funcional y Orientada a Objetos
- Módulos y Espacios de Nombres
Módulo 6: Programación Asíncrona y Paralela
- Flujos de Trabajo Asíncronos
- Biblioteca de Tareas Paralelas
- MailboxProcessor y Agentes
- Patrones de Concurrencia
Módulo 7: Acceso y Manipulación de Datos
Módulo 8: Pruebas y Depuración
- Pruebas Unitarias con NUnit
- Pruebas Basadas en Propiedades con FsCheck
- Técnicas de Depuración
- Perfilado de Rendimiento
