Fundamentos del lenguaje
29 pasos en 9 series de OCaml.
OCaml es la rama industrial de la familia ML: inferencia de tipos tan completa que las anotaciones son una elección de estilo, coincidencia de patrones que el compilador audita por cobertura, y un sistema de módulos — functores, firmas — que ningún lenguaje mainstream ha igualado. Jane Street mueve miles de millones a través de él, Coq y el compilador original de Rust se escribieron en él, y F#, ReasonML y una generación de autores de type checkers cargan sus ideas. Es rápido, terso y honesto: la ausencia es un option, los errores son valores o excepciones declaradas, y la mutación se deletrea.
Este tour teclea el núcleo: let y let-in con los refs como excepción ruidosa, Printf, currificación y aplicación parcial, el pipeline y @@ y la composición hecha a mano, argumentos etiquetados y opcionales, match con guardas, option y result y variantes, listas de cons con el módulo List y ambos pliegues, records con copia-y-actualización, tuplas, polimorfismo, Hashtbl contra listas de asociación, arreglos mutables con los operadores punteados de flotantes, Seq perezoso, procesamiento de strings, y las piezas insignia — módulos y functores vía Map.Make. El Bis es el trío de scripts de siempre en OCaml honesto de biblioteca estándar.
Valores
- La forma del scriptEl OCaml más pequeño: ataduras let y un let () = de efectos.
- Ataduras letInmutable por defecto; los refs son las celdas mutables deletreadas.
- Strings y PrintfConcatena con ^, formatea con %s y %.1f, sprintf devuelve.
Funciones
- CurrificaciónCada función toma un argumento; la aplicación parcial es gratis.
- El pipeline|> alimenta el valor izquierdo hacia adelante; los datos se leen en orden.
- Composición y @@Arma funciones desde funciones; @@ ahorra el último paréntesis.
- Argumentos etiquetadosLas ~etiquetas nombran argumentos; los ?opcionales cargan defectos.
Coincidencia de patrones
Listas
- Listas y consInmutables y enlazadas: :: construye, @ concatena, los patrones parten.
- El módulo Listmap, filter, sort, fold_left: el kit de todos los días.
- Plieguesfold_left enhebra un acumulador de cualquier forma.
- AgruparAgrupa por clave con un pliegue a lista de asociación y clasifica.
Tipos
- RecordsPaquetes con nombre inmutables, con igualdad estructural incluida.
- TuplasEmpareja valores sin ceremonia; los patrones las desarman.
- Polimorfismo'a es cualquier tipo: una función, verificada una vez, reusada siempre.
Colecciones
- Hashtbl y listas de asociaciónEl mapa mutable, y el hábito inmutable para datos chicos.
- ArreglosDe tamaño fijo y mutables: .(i) indexa, <- escribe.
- SeqLa secuencia perezosa: infinita hasta que algo tira.
- Procesar stringssplit_on_char y filter_map vuelven datos las notas de campo.
Módulos
Idiomas del lenguaje
- resultOk o Error, con bind para mantener el pipeline en la vía feliz.
- ExcepcionesDeclaradas como variantes, atrapadas por patrón.
- Recursiónrec permite la autorreferencia; los acumuladores dejan la llamada en cola.
Bis
- word_freq.mlUna tabla de frecuencias con split_on_char, un Hashtbl y un orden.
- grade_report.mlBoletines desde un roster de records, una escalera de if y columnas.
- temp_stats.mlUna semana de temperaturas: extremos por pliegue, barras y saltos.