Ocaml
Keywords: Ocaml, Francia, INRIA, ML, Manejo de excepciones, Programación funcional, Programación imperativa, Programación orientada a objetos
El lenguaje Objective CAML, también llamad Ocaml o O'Caml, es un lenguaje de programación avanzado de la familia de los lenguajes ML, desarrollado y distribuido por el INRIA en Francia. Ocaml admite los paradigmas de programación imperativa, programación funcional y programación orientada a objetos.
Ocaml nace de la evolución del lenguaje CAML[1], abreviación de Categorical Abstract Machine Language), al integrarsele la programación con objetos.
El código fuente en Ocaml se compila en código para una máquina virtual o en código de máquina para diferentes arquitecturas. Este último compilador produce código comparable en eficiencia al producido por compiladores como el del lenguaje C/C++.
Ocaml dispone de un análisis de tipos estático con inferencia de tipos, con valores funcionales de primera clase, polimorfismo paramétrizado, llamada por patrones, manejo de excepciones, recolección de basura y otras características avanzadas.
Ejemplos de código
Manipulación de listas
(* Listas genéricas *)
(* Longitud de una lista *)
let rec long = function
|[] -> 0
|x::xs -> 1 + long xs;;
(* Ordenamiento por inserción *)
(* dada una relación de orden *)
let rec ordenar = function
|[] -> []
|x::xs -> insertar x (ordenar xs)
and insertar e = function
|[] -> [e]
|x::xs -> if x > e
then e::x::xs
else x::(insertar e xs);;
# let l = ["La"; "vida"; "es"; "un"; "largo"; "y"; "tranquilo"; "rio"];;
- : string list =
["La"; "vida"; "es"; "un"; "largo"; "y"; "tranquilo"; "rio"]
# long l;;
- : int = 8
# ordenar l;;
- : string list =
["La"; "es"; "largo"; "rio"; "tranquilo"; "un"; "vida"; "y"]
Árboles
(* Definición de un árbol binario, para cualquier tipo 'a *)
type 'a arbol = AVac | Nodo of ('a arbol * 'a * 'a arbol);;
let a = Nodo(AVac, 4, Nodo(AVac, 2, AVac));;
(* Altura del árbol *)
let rec altura = function
|AVac -> 0
|Nodo(i, _, d) -> 1 + max (altura i) (altura d) ;;
# altura a;;
- : int = 2
Funciones locales y alcance de variables
let elefantes n =
let rec compañeros m =
if m<=n then begin
print_int m;
print_string " Elefantes, se balanceaban, sobre la tela de una araña.\n";
print_string "Como veían, que resistía, fueron a buscar a un camarada.\n";
compañeros (m+1)
end in
print_string "1 Elefante, se balanceaba, sobre la tela de una araña.\n";
print_string "Como veía, que resistía, se fue a buscar a un camarada.\n";
compañeros 2
;;
elefantes 99 ;;
Enlaces externos
- Sitio oficial de O'Caml en el Inria
- http://www.ocaml.org
- Développement d'applications avec Objective Caml, libro en línea (en frances).
- A brief history of Caml (as I remember it)
- REDIRECT Plantilla:Lenguajes de programación
