lenguaje haskell

Download Lenguaje Haskell

Post on 06-Jun-2015

7.713 views

Category:

Documents

4 download

Embed Size (px)

DESCRIPTION

Presentacion de Paradigma Funcional y lenguaje de programacion Haskel

TRANSCRIPT

El lenguaje Haskell 98Un lenguaje perezoso completamente Curry con sobrecarga.

Juan Pedro Villa

Introduccin

Las razones agudas son ronquidos para los odos tontos. William Shakespeare

ObjetivosObjetivo general

Investigar y aprender las caractersticas de la programacin funcional a partir del lenguaje puramente funcional Haskell.

Objetivos especficos Responder a la pregunta por la importancia del aprendizaje de un lenguaje de programacin funcional y de su uso en la informtica. Comparar el paradigma funcional con otros paradigmas de programacin, identificando las ventajas y desventajas de cada uno, especialmente en trminos de modularizacin.

Objetivos (2)Objetivos especficos (2)

Interpretar los resultados obtenidos del proceso de investigacin y de elaboracin de programas en el lenguaje de programacin Haskell para la determinacin de los aspectos fundamentales de un lenguaje funcional. Participar en una comunidad de escritura colaborativa (wiki) mediante el uso y la publicacin de contenidos relacionados con Haskell y la programacin funcional. Conocer la estructura bsica de un proyecto de investigacin que puede aplicarse o servir como base para otros.

Contenidos

Introduccin Programacin Funcional Programacin Funcional con Haskell 98

Programacin funcional bsica con Haskell 98 Comunidad Haskell

Conclusiones

Programacin funcional

Programacin funcional

La programacin funcional es un paradigma de programacin declarativa basado en el uso de funciones matemticas. Caractersticas:

Modo de evaluacin: Impaciente o perezosa. Funciones de primer orden o de orden superior. Inferencia de tipos y polimorfismo o lenguajes libres de tipos (no tipificados) o con tipificacin dinmica.

Cualidades de los lenguajes de programacin funcional

Todos los procedimientos son funciones y distinguen claramente los valores de entrada (parmetros) de los de salida (resultados). No existen variables ni asignaciones las variables han sido reemplazadas por los parmetros. No existen ciclos stos han sido reemplazados por las llamadas recursivas.

Cualidades de los lenguajes de programacin funcional (2)

El valor de una funcin depende slo del valor de sus parmetros y no del orden de evaluacin o de la trayectoria de ejecucin que llev a la llamada. Las funciones son valores de primera clase.

Ventajas de la programacin funcional (con Haskell)

Brevedad Facilidad para comprender Manejo de los tipos de datos Reutilizacin de cdigo y polimorfismo Evaluacin perezosa y programas modulares Abstracciones poderosas y funciones como valores de primera clase Recoleccin de basura

Desventajas de la programacin funcional

El inconveniente principal tpicamente ha sido la ineficiencia en la ejecucin de los lenguajes funcionales. Debido a su naturaleza dinmica, estos lenguajes siempre han sido interpretados ms que compilados, resultando en una prdida sustancial en velocidad de ejecucin.

Lenguajes de programacin funcional

Lisp Scheme ML Haskell Hope Miranda Orwell

Programacin funcional en un lenguaje imperativo

El requisito bsico para la programacin funcional en cualquier lenguaje es la disponibilidad de la recursin y un mecanismo general de funciones adecuado. Un problema tpico en la programacin de estilo funcional es el costo de llevar a cabo todos los ciclos mediante la recursin. Pero existe una forma de recursin que puede convertirse fcilmente a una estructura estndar de ciclo, y se llama recursin de cola, donde la ltima operacin de un procedimiento es llamarse a s mismo.

Las matemticas en la programacin funcional

Funciones recursivas

Se habla de definiciones recursivas. Inventado por Alonzo Church como un formalismo matemtico para expresar el cmputo por medio de funciones.

Clculo lambda

El lenguaje Haskell 98

Haskell

Un lenguaje puramente funcional fuertemente tipificado, con funciones de orden superior, polimorfismo, sistema de clases de tipos, mnadas, evaluacin perezosa, ... (Imagen tomada de Haskell - HaskellWiki)

HaskellLenguaje de programacin HaskellParadigma de computacin Ao de aparicin Tipos de datos Implementaciones Estndar Influencias de Influencias en Funcional, no estricto, modular 1990 Estticos y dbiles GHC, Hugs, NHC, JHC, Yhc Haskell 98 Miranda, ML, Gofer Python, Perl

Historia

Functional Programming and Computer Architecture (FPCA '87) Haskell Report www.haskell.org Haskell 98 Haskell Wiki Timeline (pdf) Haskell 2008

Haskell Brooks Curry (1900 - 1982)

Lgico y matemtico norteamericano. Pionero de la lgica matemtica moderna. Desarroll la lgica combinatoria, que es la base de un estilo de programacin funcional. Su trabajo ha sido til en ciencias de la computacin y en el diseo de lenguajes.

Presente y futuro del lenguaje Haskell

Haskell en educacin Haskell en investigacin Haskell en informtica

Haskell en cinco pasos1.Instalar Haskell1.GHC 2.Hugs

2.Iniciar Haskell 3.Escribir el primer programa en Haskell1.Hello World! 2.Factorial

4.Haskell como calculadora 5.Pasos posteriores

Tipos simples predefinidos

El tipo Bool El tipo Int El tipo Integer El tipo Float El tipo Double El tipo Char

El tipo Bool

Los valores de este tipo representan expresiones lgicas, cuyo resultado puede ser True o False. Funciones y operadores:

(&&) :: Bool -> Bool -> Bool. Conjuncin

lgica.

(||) :: Bool -> Bool -> Bool. Disyuncin

lgica.

not :: Bool -> Bool. Negacin lgica. otherwise :: Bool. Funcin constante que

devuelve el valor True.

Los tipos Int e Integer

Los valores del tipo Int son nmeros enteros de precisin limitada que cubren al menos el intervalo 29 29 [-2 , 2 1]. Los valores del tipo Integer son nmeros enteros de precisin ilimitada. Funciones y operadores:

Los tipos Int e Integer (Funciones y operadores)

(+),(-),(*) :: Int -> Int -> Int. Suma, resta y producto de enteros. div,mod :: Int -> Int -> Int. Cociente y

(^) :: Int -> Int -> Int. Operador potencia.

residuo.

abs :: Int -> Int. Valor absoluto. signum :: Int -> Int. Devuelve -1, 0 1 segn el

signo.

negate :: Int -> Int. Invierte el signo (uso

prefijo con (-)).

even, odd :: Int -> Bool. Comprueban la

naturaleza par o impar de un entero.

Los tipos Float y Double

Representan nmeros reales. Notacin:

Habitual: 1.35, -15.345, 1.0 1. Cientfica: 1.5e7 1.5e-17.(+),(*),(-),(/) :: Float -> Float -> Float.

Funciones y operadores:

Suma, producto, resta y divisin real.

(^) :: Float -> Int -> Float. Operador

potencia.

(**) :: Float -> Float -> Float. Operador

potencia.

Los tipos Float y Double (Funciones y operadores)

abs :: Float -> Float. Valor absoluto. signum :: Float -> Float. -1.0, 0.0 1.0 segn

el signo.

negate :: Float -> Float. Valor negado. Uso

prefijo -.

sin, asin, cos, acos, tan, atan :: Float -> Float. Funciones trigonomtricas (radianes). atan2 :: Float -> Float -> Float.

Arcotangente.

log, exp :: Float -> Float. Funciones y

logartmica y exponencial.

sqrt :: Float -> Float. Raz cuadrada.

Los tipos Float y Double (Funciones y operadores) (2)

pi :: Float. El valor del nmero pi. truncate, round, floor, ceiling :: Float -> Integer Float -> Int.

truncate elimina la parte decimal. round redondea al entero ms prximo. floor devuelve el entero inferior. ceiling devuelve el entero superior.

fromInt :: Int -> Float y fromInteger :: Integer -> Float. Conversin de tipo.

El tipo Char

Representa un carcter (una letra, un dgito, un signo, etc.). Funciones y operadores:

ord :: Char -> Int. Devuelve el cdigo ASCII. chr :: Int -> Char. Inversa a ord. isUpper,isLower,isDigit,isAlpha :: Char -> Bool. toUpper,toLower :: Char -> Char.

Operadores de igualdad y orden

Para todos los tipos bsicos.

> Mayor que < Menor que == Igual a >= Mayor o igual que

Tipos funcionales:

Si t1, t2, ... , tn ,tr son tipos vlidos entonces t1 -> t2-> ... -> tn -> tr es el tipo de una funcin con n argumentos. Factorial :: Integer -> Integer.

Ejemplos:

Comentarios

Un comentario es un texto que acompaa al programa pero que es ignorado por el evaluador. Hay dos modos de incluir comentarios en un programa:

Comentarios de una sola lnea: Comienzan por dos guiones y abarcan hasta el final de la lnea. Comentarios de ms de una lnea: Comienzan por los caracteres {- y acaban en -}. Pueden abarcar varias lneas y anidarse.

Operadores

Se trata de funciones con dos argumentos cuyo nombre es simblico (cadena de signos) y que pueden ser invocados de forma infija. Al definir un operador, puede definirse su prioridad (entero entre 0 y 9) y su asociatividad.

infix prioridad dentificador infixl prioridad identificador infixr prioridad identificador

Asociatividad y prioridad de los operadores predefinidos

infixr 9 .

infixl 9 !! infixr 8 ^, ^^, ** infixl 7 *, /, `quot`, `rem`, `div`, `mod` infixl 6 +, infixr 5 :, ++ infix 4 ==, /=, =, `elem`, `notElem` infixr 3 && infixr 2 || infixl 1 >>, >>= infixr 1 = -> -> -> resultado1 resultado2 ... resultadon

La funcin error

Es una funcin predefinida que permite al programador terminar la evaluacin de una expresin y mostrar un mensaje por pantalla. Sintaxis:error mensaje

Eje