Movatterモバイル変換


[0]ホーム

URL:


Ir al contenido
WikipediaLa enciclopedia libre
Buscar

Caml

De Wikipedia, la enciclopedia libre
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
Paradigmafuncional,imperativa,orientada a objetos enOCaml
Apareció en26 de julio de 2012
Diseñado porGérard Huet, Xavier Leroy
Última versión estable4.02.3(27 de julio de 2015)
Sistema de tiposfuerte,estático
ImplementacionesOCaml, Caml Light
Influido porML
Ha influido aF#
Sistema operativoSistemas operativos basados enUnix (Linux, MacOSx) y Windows
LicenciaGNU

Caml (Originalmente un acrónimo paraCategoricalAbstractMachineLanguage, en españolLenguaje Máquina Abstracto Categórico) es un dialecto de la familia del lenguajeML, desarrollado enINRIA y anteriormente en laEscuela Normal Superior de París.

Como muchos descendientes deML, Caml es un lenguaje detipadoestático,evaluación estricta, y utilizaadministración de memoria automática.

La primera implementación de Caml enLisp fue apodada "CAML pesado" debido a los requisitos de memoria yCPU relativos a su sucesor "Caml Light", aquello fue implementado enC 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 esOCaml, el cual añade muchas características nuevas al lenguaje, entre ellas unacapa de objeto.

Ejemplos

[editar]

Lo siguiente, # representa el prompt de OCaml.

Hola Mundo

[editar]
print_endline"Hello World!";;

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

[editar]

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ónfactorial en Caml:

letrecfactn=ifn=0then1elsen*fact(n-1);;

La función puede escribirse equivalentemente utilizandopatrones de emparejamiento:

letrecfact=function|01|nn*fact(n-1);;

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

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

#fact12;;-:int=479001600

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

[editar]

Desde queOCaml es unlenguaje 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 laderivada numérica de una función es una de ellas. La funciónd en Caml computa la derivada numérica de una función dada f en un punto dadox:

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

Esta función requiere un valor infinitesimaldelta. 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ónd 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 comocurrificación. En este caso, es útil al aplicar parcialmente el primer argumentodelta a d, para obtener una función más especializada:

#letd=d(sqrtepsilon_float);;vald:(floatfloat)floatfloat=<fun>

Note que el tipo inferido indica que la sustitución d espera una función del tipo flotante floatfloat → float como primer argumento. Podemos computar una aproximación numérica a la derivada de la funciónx3x1{\displaystyle x^{3}-x-1} en el puntox=3{\displaystyle x=3} con:

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

La respuesta correcta es:f(x)=3x21f(3)=271=26{\displaystyle f'(x)=3x^{2}-1\rightarrow f'(3)=27-1=26}

La funciónd 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)

[editar]

La transformadaWavelet 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 yh2) del frente y almacenando sus sumas y diferencias en las listass yd, respectivamente:

#lethaarl=letrecauxlsd=matchl,s,dwith[s],[],ds::d|[],s,dauxs[]d|h1::h2::t,s,dauxt(h1+h2::s)(h1-h2::d)|_invalid_arg"haar"inauxl[][];;valhaar:intlistintlist=<fun>

Por ejemplo:

#haar[1;2;3;4;-4;-3;-2;-1];;-:intlist=[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 deOCaml 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

[editar]

Referencias

[editar]

Enlaces externos

[editar]

Libros

[editar]
Control de autoridades
Obtenido de «https://es.wikipedia.org/w/index.php?title=Caml&oldid=164126695»
Categorías:
Categoría oculta:

[8]ページ先頭

©2009-2025 Movatter.jp