- Ocaml
-
El lenguaje Objective CAML, también llamado Ocaml u 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, abreviación de Categorical Abstract Machine Language, al integrársele la programación con objetos.[1]
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 parametrizado, llamada por patrones, manejo de excepciones, recolección de basura y otras características avanzadas.
Contenido
Ejemplos de código
"Hola Mundo"
> print_endline "Hello World !" ;; Hello World ! val () : unit = <fun> >
Éste es un ejemplo de uso del entorno de ejecución (el símbolo de entrada de datos es el ">").
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"; "río"];; - : string list = ["La"; "vida"; "es"; "un"; "largo"; "y"; "tranquilo"; "río"] # long l;; - : int = 8 # ordenar l;; - : string list = ["La"; "es"; "largo"; "río"; "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 companneros 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"; companneros (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"; companneros 2 ;; elefantes 99 ;;
Más ejemplos en el intérprete
> let f x y = x + y ;; val f : int -> int -> int = <fun> > f 3 4 ;; - 7 : int = <fun> > let g x = f 3 x;; val g : int -> int = <fun> > g 9 ;; - 12 : int = <fun>
> let o = object val x = 3 method f y = x + y end;; val o : < f : int -> int > = <obj> > let u x y = x#f y ;; val u : < f : 'a -> 'b; .. > -> 'a -> 'b = <fun> > u o 4 ;; - : int = 7 > class add i = object val mutable x = i method f y = x + y method set k = x <- k end ;; class add : int -> object val mutable x : int method f : int -> int method set : int -> unit end > let more = new add 3 ;; val more : add = obj > (u more 4) + (u o 5) ;; - : int = 15 > more#set 6 ;; - : unit = ()
Referencias
Enlaces externos
- Sitio oficial de O'Caml en el INRIA (en inglés)
- tutorial de Ocaml (INRIA)
- Développement d'applications avec Objective Caml, libro en línea (en francés).
- A brief history of Caml (as I remember it)
Categoría:- Lenguajes de programación orientada a objetos
Wikimedia foundation. 2010.