fbpx
Wikipedia

Caml

Caml (Originalmente un acrónimo para Categorical Abstract Machine Language, en español Lenguaje Máquina Abstracto Categórico) es un dialecto de la familia del lenguaje ML, desarrollado en INRIA y anteriormente en la Escuela Normal Superior de París.

Caml
Desarrollador(es)
Gérard Huet, Guy Cousineau, Ascánder Suárez, Pierre Weis, Michel Mauny (Caml pesado), Xavier Leroy (Caml Light, OCaml)
http://caml.inria.fr
Información general
Paradigma funcional, imperativa, orientada a objetos en OCaml
Apareció en 26 de julio de 2012
Diseñado por Gérard Huet, Xavier Leroy
Última versión estable 4.02.3 (27 de julio de 2015)
Sistema de tipos fuerte, estático
Implementaciones OCaml, Caml Light
Influido por ML
Ha influido a F#
Sistema operativo Sistemas operativos basados en Unix (Linux, MacOSx) y Windows
Licencia GNU

Como muchos descendientes de ML, Caml es un lenguaje de tipado estático, evaluación estricta, y utiliza administración de memoria automática.

La primera implementación de Caml en Lisp fue apodada "CAML pesado" debido a los requisitos de memoria y CPU relativos a su sucesor "Caml Light", aquello fue implementado en C por Xavier Leroy y Damien Doligez. Además de una reescritura completa, "CAML Special Light" añadió un potente sistema de módulos al núcleo del lenguaje.

Actualmente, la implementación principal de Caml es OCaml, el cual añade muchas características nuevas al lenguaje, entre ellas una capa de objeto.

Ejemplos

Lo siguiente, # representa el prompt de OCaml.

Hola Mundo

print_endline "Hello World!";; 

Función factorial (recursividad y programación puramente funcional)

Muchas funciones matemáticas, como el factorial, son representadas más naturalmente en una forma puramente funcional. La siguiente función recursiva, puramente funcional implementa la operación factorial en Caml:

let rec fact n = if n=0 then 1 else n * fact(n - 1);; 

La función puede escribirse equivalentemente utilizando patrones de emparejamiento:

let rec fact = function | 0  1 | n  n * fact(n - 1);; 

Esta última forma es la definición matemática de factorial como una relación de recurrencia.

Note que el compilador infirió el tipo de esta función para ser int int → int, significa que esta función mapea enteros a enteros. Por ejemplo, 12! Es:

 # fact 12;; - : int = 479001600 

Derivación numérica (funciones de alto orden)

Desde que OCaml es un lenguaje de programación funcional, es fácil crear y repasar funciones en programas de OCaml. Esta capacidad tiene un número enorme de aplicaciones. Calcular la derivada numérica de una función es una de ellas. La función d en Caml computa la derivada numérica de una función dada f en un punto dado x:

let d delta f x = (f (x +. delta) -. f (x -. delta)) /. (2. *. delta);; 

Esta función requiere un valor infinitesimal delta. Una buena elección para delta es la raíz cúbica del épsilon de la máquina.[cita requerida]

El tipo de la función d indica que ésta mapea un tipo de dato flotante a otra función del mismo tipo (float → float) → float → float. Esto nos permite aplicar argumentos parcialmente. Este estilo funcional es conocido como currificación. En este caso, es útil al aplicar parcialmente el primer argumento delta a d, para obtener una función más especializada:

# let d = d (sqrt epsilon_float);; val d : (float  float)  float  float = <fun> 

Note que el tipo inferido indica que la sustitución d espera una función del tipo flotante float float → float como primer argumento. Podemos computar una aproximación numérica a la derivada de la función   en el punto   con:

# d (fun x  x *. x *. x -. x -. 1.) 3.;; - : float = 26. 

La respuesta correcta es: 

La función d se denomina "función de alto orden" ya que acepta otra función (f) como argumento.

Los conceptos de funciones currificadas y de alto orden son útiles evidentemente en programas matemáticos. De hecho, estos conceptos son igualmente aplicables a otras formas de programación y pueden emplearse en código de factor mucho más agresivamente, resultando eprogramas más cortos y con menos errores.

Transformada Wavelet discreta (concordancia de patrones)

La transformada Wavelet de Haar de una lista de números enteros de potencia en base dos puede ser implementada muy sucintamente en Caml y es un ejemplo excelente del uso de la concordancia de patrones sobre listas, tomando pares de elementos (h1 y h2) del frente y almacenando sus sumas y diferencias en las listas s y d, respectivamente:

# let haar l = let rec aux l s d = match l, s, d with [s], [], d  s :: d | [], s, d  aux s [] d | h1 :: h2 :: t, s, d  aux t (h1 + h2 :: s) (h1 - h2 :: d) | _  invalid_arg "haar" in aux l [] [];; val haar : int list  int list = <fun> 

Por ejemplo:

 # haar [1; 2; 3; 4; -4; -3; -2; -1];; - : int list = [0; 20; 4; 4; -1; -1; -1; -1] 

El patrón de emparejamiento permite transformaciones complicadas para ser representadas claramente y sucintamente (brevemente). Además, el compilador de OCaml realiza concordancia de patrones en un código muy eficaz, el tiempo en el que los programas arrojan resultados es más corto y más rápido que el código equivalente escrito con una estructura "switch-case" (Cardelli 1984, p. 210.).

Véase también

Referencias

  • Cardelli, Luca (1984). Compiling a functional language ACM simposio en LISP y programación funcional, Association of Computer Machinery.

Enlaces externos

  • Repositorio de Caml en Github.
  • Sitio web oficial de Caml.
  • Tutoriales de caml (en inglés).

Libros

  • The Functional Approach to Programming with Caml by Guy Cousineau and Michel Mauny.
  •   Datos: Q1118153

caml, originalmente, acrónimo, para, categorical, abstract, machine, language, español, lenguaje, máquina, abstracto, categórico, dialecto, familia, lenguaje, desarrollado, inria, anteriormente, escuela, normal, superior, parís, desarrollador, gérard, huet, co. Caml Originalmente un acronimo para Categorical Abstract Machine Language en espanol Lenguaje Maquina Abstracto Categorico es un dialecto de la familia del lenguaje ML desarrollado en INRIA y anteriormente en la Escuela Normal Superior de Paris CamlDesarrollador es Gerard Huet Guy Cousineau Ascander Suarez Pierre Weis Michel Mauny Caml pesado Xavier Leroy Caml Light OCaml http caml inria frInformacion generalParadigmafuncional imperativa orientada a objetos en OCamlAparecio en26 de julio de 2012Disenado porGerard Huet Xavier LeroyUltima version estable4 02 3 27 de julio de 2015 Sistema de tiposfuerte estaticoImplementacionesOCaml Caml LightInfluido porMLHa influido aF Sistema operativoSistemas operativos basados en Unix Linux MacOSx y WindowsLicenciaGNU editar datos en Wikidata Como muchos descendientes de ML Caml es un lenguaje de tipado estatico evaluacion estricta y utiliza administracion de memoria automatica La primera implementacion de Caml en Lisp fue apodada CAML pesado debido a los requisitos de memoria y CPU relativos a su sucesor Caml Light aquello fue implementado en C por Xavier Leroy y Damien Doligez Ademas de una reescritura completa CAML Special Light anadio un potente sistema de modulos al nucleo del lenguaje Actualmente la implementacion principal de Caml es OCaml el cual anade muchas caracteristicas nuevas al lenguaje entre ellas una capa de objeto Indice 1 Ejemplos 1 1 Hola Mundo 1 2 Funcion factorial recursividad y programacion puramente funcional 1 3 Derivacion numerica funciones de alto orden 1 4 Transformada Wavelet discreta concordancia de patrones 2 Vease tambien 3 Referencias 4 Enlaces externos 4 1 LibrosEjemplos EditarLo siguiente representa el prompt de OCaml Hola Mundo Editar print endline Hello World Funcion factorial recursividad y programacion puramente funcional EditarMuchas funciones matematicas como el factorial son representadas mas naturalmente en una forma puramente funcional La siguiente funcion recursiva puramente funcional implementa la operacion factorial en Caml let rec fact n if n 0 then 1 else n fact n 1 La funcion puede escribirse equivalentemente utilizando patrones de emparejamiento let rec fact function 0 1 n n fact n 1 Esta ultima forma es la definicion matematica de factorial como una relacion de recurrencia Note que el compilador infirio el tipo de esta funcion para ser int int int significa que esta funcion mapea enteros a enteros Por ejemplo 12 Es fact 12 int 479001600 Derivacion numerica funciones de alto orden Editar Desde que OCaml es un lenguaje de programacion funcional es facil crear y repasar funciones en programas de OCaml Esta capacidad tiene un numero enorme de aplicaciones Calcular la derivada numerica de una funcion es una de ellas La funcion d en Caml computa la derivada numerica de una funcion dada f en un punto dado x let d delta f x f x delta f x delta 2 delta Esta funcion requiere un valor infinitesimal delta Una buena eleccion para delta es la raiz cubica del epsilon de la maquina cita requerida El tipo de la funcion d indica que esta mapea un tipo de dato flotante a otra funcion del mismo tipo float float float float Esto nos permite aplicar argumentos parcialmente Este estilo funcional es conocido como currificacion En este caso es util al aplicar parcialmente el primer argumento delta a d para obtener una funcion mas especializada let d d sqrt epsilon float val d float float float float lt fun gt Note que el tipo inferido indica que la sustitucion d espera una funcion del tipo flotante float float float como primer argumento Podemos computar una aproximacion numerica a la derivada de la funcion x 3 x 1 displaystyle x 3 x 1 en el punto x 3 displaystyle x 3 con d fun x x x x x 1 3 float 26 La respuesta correcta es f x 3 x 2 1 f 3 27 1 26 displaystyle f x 3x 2 1 rightarrow f 3 27 1 26 La funcion d se denomina funcion de alto orden ya que acepta otra funcion f como argumento Los conceptos de funciones currificadas y de alto orden son utiles evidentemente en programas matematicos De hecho estos conceptos son igualmente aplicables a otras formas de programacion y pueden emplearse en codigo de factor mucho mas agresivamente resultando eprogramas mas cortos y con menos errores Transformada Wavelet discreta concordancia de patrones EditarLa transformada Wavelet de Haar de una lista de numeros enteros de potencia en base dos puede ser implementada muy sucintamente en Caml y es un ejemplo excelente del uso de la concordancia de patrones sobre listas tomando pares de elementos h1 y h2 del frente y almacenando sus sumas y diferencias en las listas s y d respectivamente let haar l let rec aux l s d match l s d with s d s d s d aux s d h1 h2 t s d aux t h1 h2 s h1 h2 d invalid arg haar in aux l val haar int list int list lt fun gt Por ejemplo haar 1 2 3 4 4 3 2 1 int list 0 20 4 4 1 1 1 1 El patron de emparejamiento permite transformaciones complicadas para ser representadas claramente y sucintamente brevemente Ademas el compilador de OCaml realiza concordancia de patrones en un codigo muy eficaz el tiempo en el que los programas arrojan resultados es mas corto y mas rapido que el codigo equivalente escrito con una estructura switch case Cardelli 1984 p 210 Vease tambien EditarOcaml Standard ML F SharpReferencias EditarCardelli Luca 1984 Compiling a functional language ACM simposio en LISP y programacion funcional Association of Computer Machinery Enlaces externos EditarRepositorio de Caml en Github Sitio web oficial de Caml Tutoriales de caml en ingles Libros Editar The Functional Approach to Programming with Caml by Guy Cousineau and Michel Mauny Datos Q1118153Obtenido de https es wikipedia org w index php title Caml amp oldid 125248996, wikipedia, wiki, leyendo, leer, libro, biblioteca,

español

, española, descargar, gratis, descargar gratis, mp3, video, mp4, 3gp, jpg, jpeg, gif, png, imagen, música, canción, película, libro, juego, juegos