miércoles, 24 de noviembre de 2010

Lenguajes Funcionales (puntos extra)

 Lenguajes Funcionales

Los programas escritos en un lenguaje funcional están constituidos únicamente por definiciones de funciones, entendiendo éstas no como subprogramas clásicos de un lenguaje imperativo, sino como funciones puramente matemáticas, en las que se verifican ciertas propiedades como la transparencia referencial (el significado de una expresión depende únicamente del significado de sus subexpresiones), y por tanto, la carencia total de efectos laterales
 .
Otras características propias de estos lenguajes son la no existencia de asignaciones de variables y la falta de construcciones estructuradas como la secuencia o la iteración (lo que obliga en la práctica a que todas las repeticiones de instrucciones se lleven a cabo por medio de funciones recursivas).
Existen dos grandes categorías de lenguajes funcionales: los funcionales puros y los híbridos. La diferencia entre ambos estriba en que los lenguajes funcionales híbridos son menos dogmáticos que los puros, al admitir conceptos tomados de los lenguajes imperativos, como las secuencias de instrucciones o la asignación de variables. En contraste, los lenguajes funcionales puros tienen una mayor potencia expresiva, conservando a la vez su transparencia referencial, algo que no se cumple siempre con un lenguaje funcional híbrido.
Haskell 

 En los años setenta se produjo lo que se conoce como la crisis del software. La gran mayoría del software que se producía no era fiable. Tenía una gran tasa de errores que ponía en grave peligro la confianza de los usuarios en estos sistemas. Por esta razón se propuso una solución: crear un nuevo modelo programación, lo que se conoce como programación funcional. Dentro de este tipo de programación tenemos lenguajes como: el Haskell, el LISP, el Miranda, el Scheme, etc.

El Haskell nació como lenguaje de programación en el año 1987, desde entonces se ha desarrollado considerablemente como un lenguaje de programación funcional puro, de propósito general. El Haskell tiene todas las innovaciones de los lenguajes funcionales como son: desarrollo de las funciones de orden superior, evaluación perezosa, tipos definidos por el usuario, tipos polimórficos estáticos, definiciones de listas por comprensión, encajes patronales, etc.

Ejemplo :
Aqui les pondre algunos ejemplos que son muy sencillos con la intencion de que las personas que batallan como yo , todavia en codificar , tengan una idea de como se trabaja en este lenguaje

funcion que muestra los numeros desde 1 hasta n 
ser1 ::Integer->Integer->String
ser1 a 0=""
ser1 a n=show(a)++" "++ser1 (a+1) (n-1)
ser ::Integer->String
ser n=(ser1 1 n) 

Programa que devuelve los cuadrados de los números desde 1 hasta n.
cuad1 ::Integer->Integer->String
cuad1 a 0=""
cuad1 a n=show(a*a)++" "++cuad1 (a+1) (n-1)
cuad ::Integer->String
cuad n=(cuad1 1 n)

 Programa que dado un número entero n, devuelve todos los primos que existen desde n hasta 1.
pr::Int->Int->Int
pr n 1=0
pr n a| (rem n a)==0=1+(pr n (a-1) )
     |otherwise=(pr n (a-1))
prim::Int->Int
prim 0=1
prim 1=1
prim 2=0
prim b=pr b (b-1)
primo::Int->String
primo 2=""
primo n|(prim n)==0=show(n)++" "++(primo (n-1))
     |otherwise=(primo (n-1))


Espero que estos ejemplos les ayuden , enseguida pondre un link de una manual  que me ayudo mucho
es un archivo en pdf , espero les ayude igual.
Manual para haskell

Erlang
Erlang es un lenguaje de programación de uso general y un sistema para ejecución. Fue desarrollada por la Ericsson para soportar aplicaciones distribuidas y tolerantes la fallos a ser ejecutadas en un ambiente de tiempo real e interrupto. Ella soporta nativamente hot swapping, de forma que el código puede ser modificado sin la parada del sistema. Originalmente era un lenguaje propietaria de la Ericsson, pero fue lanzada en código abierto en 1998.
La implementación de la Ericsson ejecuta un código interpretado en una máquina virtual, pero también incluye un compilador para código nativo (aunque no soportado para todas las plataformas). 

Ejemplos

hola mundo :

-module(primer).
   -export([hello_world/0]).
  
   hello_world() -> 
          "hello world".



 
espero les sirva esta informacion 

1 comentario: