Ocaml
A linguaxe Objective CAML, tamén chamado Ocaml ou O'Caml, é unha linguaxe de programación avanzada da familia das linguaxes ML, desenvolvida e distribuída polo INRIA en Francia. Ocaml admite os paradigmas de programación imperativa, programación funcional e programación orientada a obxectos.
Ocaml nace da evolución da linguaxe CAML, abreviación de Categorical Abstract Machine Language, ao integrárselle a programación con obxectos.[1]
O código fonte en Ocaml se compila en código para unha máquina virtual ou en código de máquina para diferentes arquitecturas. Este último compilador produce código comparable en eficiencia ao producido por compiladores como o da linguaxe C/C++.
Ocaml dispón dunha análise de tipos estático con inferencia de tipos, con valores funcionais de primeira clase, polimorfismo parametrizado, chamada por patróns, manexo de excepcións, recolección de lixo e outras características avanzadas.
Exemplos de código
editar"Ola Mundo"
editar> print_endline "Ola, mundo !" ;; Ola, mundo ! val () : unit = <fun> >
Este é un exemplo de uso da contorna de execución (o símbolo de entrada de datos é o ">").
Manipulación de listas
editar(* Listas xenéricas *) (* Lonxitude dunha lista *) let rec long = function |[] -> 0 |x::xs -> 1 + long xs;; (* Ordenamento por inserción *) (* dada unha relación de orde *) let rec ordenar = function |[] -> [] |x::xs -> inserir x (ordenar xs) and inserir e = function |[] -> [e] |x::xs -> if x > e then e::x::xs else x::(inserir e xs);; # let l = ["A"; "vida"; "é"; "un"; "longo"; "e"; "tranquilo"; "río"];; - : string list = ["A"; "vida"; "é"; "un"; "longo"; "e"; "tranquilo"; "río"] # long l;; - : int = 8 # ordenar l;; - : string list = ["A"; "é"; "longo"; "río"; "tranquilo"; "un"; "vida"; "e"]
Árbores
editar(* Definición dunha árbore binaria, para calquera tipo 'a ). * type 'a arbol = AVac | Nodo of ('a arbol * 'a 'a arbol);;. * let a = Nodo(AVac, 4, Nodo(AVac, 2, AVac));; (* Altura da árbore *) let rec altura = function |AVac -> 0 |Nodo(i, _, d) -> 1 + max (altura i) (altura d) ;; # altura a;; - : int = 2
Funcións locais e alcance de variables
editarlet elefantes n = let rec companneros m = if m<=n then begin print_int m; print_string "5 elefantes bambeaban sobre a tea dunha araña.@n/*n"; print_string "Como vían que resistía, foron buscar un camarada.@n/*n"; companneros (m+1) end in print_string "1 elefante bambeaba sobre a tea dunha araña.@n/*n"; print_string "Como vía que resistía, foi buscar un camarada.@n/*n"; companneros 2 ;; elefantes 99 ;;
Máis exemplos no intérprete
editar> let f x e = x + e ;; val f : int -> int -> int = <fun> > f 3 4 ;; - 7 : int = <fun> > let g x = f 3 ;; val g : int -> int = <fun> > g 9 ;; - 12 : int = <fun>
> let ou =object val x= 3 method f e = x + e end;; val ou : < f : int -> int > = <obj> > let ou x e = x#f e ;; val ou : < f : 'a -> 'b; .. > -> 'a -> 'b = <fun> > ou ou 4 ;; - : int = 7 > class add i = object val mutable x = i method f e = x + e 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 > (ou more 4) + (ou ou 5) ;; - : int = 15 > more#set 6 ;; - : unit = ()
Notas
editarLigazóns externas
editar- Sitio oficial de Ou'Caml no INRIA (en inglés)
- tutorial de Ocaml (INRIA) Arquivado 09 de agosto de 2006 en Wayback Machine.
- Développement d'applications avec Objective Caml, libro en liña (en francés).
- A brief history of Caml (as I remember it)