Revision 58306242 of "Ocaml" on eswikiEl 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.<ref>[http://www.pps.jussieu.fr/~cousinea/Caml/caml_history.html A brief history of Caml (as I remember it)]</ref>
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 [[Lenguaje de programación C|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.
== Ejemplos de código ==
=== "Hola Mundo" ===
<pre>
> print_endline "Hello World !" ;;
Hello World !
val () : unit = <fun>
>
</pre>
Éste es un ejemplo de uso del entorno de ejecución (el símbolo de entrada de datos es el ">").
=== Manipulación de listas ===
<pre>
(* 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"]
</pre>
=== Árboles ===
<pre>
(* 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
</pre>
=== Funciones locales y alcance de variables ===
<pre>
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 ;;
</pre>
=== 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 ==
<references />
== Enlaces externos ==
* [http://www.ocaml.org Sitio oficial de O'Caml en el INRIA] (en inglés)
* [http://try.ocamlpro.com/ Tratar en su navegador] (en inglés y francés)
* [http://www.ocaml-tutorial.org/ tutorial de Ocaml (INRIA)]
* [http://www.pps.jussieu.fr/Livres/ora/DA-OCAML/index.html ''Développement d'applications avec Objective Caml''], libro en línea (en francés).
* [http://www.pps.jussieu.fr/~cousinea/Caml/caml_history.html A brief history of Caml (as I remember it)]
[[Categoría:Lenguajes de programación orientada a objetos]]
[[ar:لغة كامل الموضوعية]]
[[az:OCaml]]
[[ca:OCaml]]
[[cs:OCaml]]
[[de:Objective CAML]]
[[el:OCaml]]
[[en:OCaml]]
[[fi:OCaml]]
[[fr:OCaml]]
[[gl:Ocaml]]
[[it:Objective Caml]]
[[ja:OCaml]]
[[ka:ობიექტური კამლი]]
[[ko:Objective Caml]]
[[la:Ocaml]]
[[ms:OCaml]]
[[nl:Ocaml]]
[[nn:OCaml]]
[[no:Objective Caml]]
[[pl:OCaml]]
[[pt:OCaml]]
[[ru:OCaml]]
[[simple:OCaml]]
[[sl:Ocaml]]
[[tg:OCaml]]
[[tr:OCaml]]
[[uk:Objective Caml]]
[[vi:OCaml]]
[[zh:OCaml]]All content in the above text box is licensed under the Creative Commons Attribution-ShareAlike license Version 4 and was originally sourced from https://es.wikipedia.org/w/index.php?oldid=58306242.
![]() ![]() This site is not affiliated with or endorsed in any way by the Wikimedia Foundation or any of its affiliates. In fact, we fucking despise them.
|