bt haskell-1

21
Lenguaje de programación funcional Introducción a la Computación - I.T.I. -1 er año Prof. Rosana Alvarez I

Upload: rosana-alvarez

Post on 03-Jul-2015

182 views

Category:

Education


0 download

DESCRIPTION

Introducción a la programación funcional en haskell

TRANSCRIPT

Page 1: Bt haskell-1

Lenguaje de programación

funcional

Introducción a la Computación - I.T.I. - 1er año

Pro

f.

Ro

san

a

Alv

are

z

I

Page 2: Bt haskell-1

El estilo de programación funcional está basado en expresiones:

- Un programa es un conjunto de definiciones de funciones matemáticas

- La ejecución de un programa es la evaluación de una expresión que contiene funciones definidas por el usuario.

Veremos una breve introducción a este lenguaje

Introducción

Page 3: Bt haskell-1

Descargamos el programa que nos permite ejecutar

Haskell en: http://hackage.haskell.org/platform/

Elegimos el sistema operativo que corresponde.

Para Windows descargamos el archivo

HaskellPlatform-2011.2.0.0-setup.exe

Para ejecutar lo que denominaremos de ahora en

más el intérprete de Haskell, accedemos a:Inicio/Todos los programas/HaskellPlataform/winGHCi

Instalar y comenzar Haskell

Page 4: Bt haskell-1

La línea : Prelude> denominada intérprete de comandos de Haskell, es la que aparece cuando no hay nada definido por el usuario cargado en el ambiente de Haskell.

Para salir del intérprete se puede usar la opción del menú, o escribir en el intérprete de comandos.

:quit o :q

Haskell

Page 5: Bt haskell-1

Escribe, en la línea de comandos, las siguientes expresiones:

1) 30*12 2) 2^5 3) 24*(67-111)

4) 2^(5+3) 5) 23/4 6) sqrt 25

7) mod 23 4 8) div 23 4

¿Cuál es el comportamiento de las funciones div y mod, predefinidas en Haskell?

¿En qué casos son ”útiles” estas funciones?

Por ejemplo, queremos ”extraer” dia, mes y año de una fecha ingresada como una cadena de números: 20112013

Calculemos con Haskell

Page 6: Bt haskell-1

Prelude> mod 20112013 10000

2013 ------ es el año

Prelude> div 20112013 1000000

20 ------ es el día

Prelude> div 20112013 10000

2011 ------ contiene el día, pero…

Prelude> mod (div 20112013 10000) 100

11 ------ este si es el día

Podemos escribir una función que nos devuelva el día, o mes o año de una fecha dada, lo haremos en próximas clases.

Haskell

Page 7: Bt haskell-1

Se denominan predefinidos a los elementos del

lenguaje que están disponibles para su uso cada vez

que ejecutamos Haskell. Están definidos en un archivo

de Haskell especial que se denomina PRELUDE (y las

funciones asociadas a éstos).

No se pueden realizar definiciones en línea de

comandos, para ello se deberá utilizar un archivo de

texto ( .hs en ambiente windows)

Haskell: predefinidos

Page 8: Bt haskell-1

El significado del operador :: en Haskell es “tiene tipo” o “es de tipo”. Se usa para indicar el tipo de cualquier expresión pues toda expresión en Haskell tiene tipo.

Por ejemplo:

4 :: Int, significa que 4 es de tipo Int

(8<4) :: Bool, significa que (8<4) es de tipo Bool && :: Bool → Bool → Bool, significa que && es de

tipo Bool en Bool en Bool.

Tipos simples predefinidos en Haskell

Page 9: Bt haskell-1

A continuación estudiaremos los principales tipos de datos predefinidos (conjunto de elementos, que puede ser finito o infinito) y las funciones asociadas a éstos:

Page 10: Bt haskell-1

El tipo Bool

Los valores de este tipo representan expresiones lógicas, cuyo resultado de evaluación puede ser True o False:

Conjunción lógica &&: BoolxBool → Bool

Disyunción lógica ||: BoolxBool → Bool

Negación lógica not : Bool → Bool

Otherwise otherwise : Bool

Otherwise: función constante que devuelve el valor True

Funciones y operadores

Page 11: Bt haskell-1

Notación currificada:

&&: Bool → Bool → Bool

||: Bool → Bool → Bool

Los operadores && y || utilizan notación infija.

El operador not utiliza notación prefija.

Calcular en Haskell:

1) (8>2) || (4>1)

2) (8>2) && (4>1)

3) (8>2) && (4<1)

Page 12: Bt haskell-1

El tipo Int

Los valores de este tipo son números enteros de precisión limitada. El intervalo de representación de Int depende de la arquitectura de la máquina y de la implementación de Haskell.

Para determinar este intervalo se pueden usar las expresiones minBound y maxBound que también son de tipo entero y determinar el rango de Int, escribir:

Prelude> minBound::Int

Prelude> maxBound::Int

Page 13: Bt haskell-1

Funciones y operadores

(+) :: Int ->Int -> Int. Suma de enteros.

(-) :: Int ->Int -> Int. Resta de enteros.

(*) :: Int ->Int -> Int. Producto de enteros.

(^) :: Int -> Int -> Int. Operador potencia, el exponente debe ser natural

div :: Int -> Int -> Int. Cociente de la división entera.

mod :: Int -> Int -> Int. Resto de la división entera.

abs :: Int -> Int. Valor absoluto

even:: Int -> Bool. Dado un entero indica si es par.

odd :: Int -> Bool. Dado un entero indican si es impar.

El tipo Int

Page 14: Bt haskell-1

El tipo Char

Un valor de tipo Char representa un caracter, es decir: una letra, un dígito, un signo de puntuación, etc. Un valor constante de tipo Char se escribe siempre entre comillas simples.

• ‘a’ denota la letra a minúscula

• ‘1’ denota al carácter correspondiente al dígito 1. No confundir con 1 de tipo Int.

• ‘?’ denota al símbolo correspondiente al signo de interrogación.

Page 15: Bt haskell-1

Subconjunto de un intervalo de los números reales.Hay dos modos de escribir valores reales:La notación habitual: 1.35 −15.345 1.0 1La notación científica: 1.5e 7 1.5e − 17

El tipo Float

Funciones y operadores del tipo FloatAlgunas de las funciones y operadores predefinidos

para este tipo son:

(+) :: Float ->Float -> Float. Suma de reales.

(-) :: Float ->Float -> Float. Resta de reales.

(*) :: Float ->Float -> Float. Producto de reales.

(^) :: Float -> Int -> Float. Potencia, base real y exponente natural .

Page 16: Bt haskell-1

Se trata de un subconjunto de un intervalo de los números reales.

El subconjunto es mayor que el correspondiente al tipo Float y las aproximaciones mas precisas.

Todas las operaciones disponibles para el tipo Floatestán también disponibles para el tipo Double.

El tipo Double

Page 17: Bt haskell-1

Prelude> :type <expr> Prelude> :t <expr>

Nos devuelve el tipo de una expresión.

Es útil para saber si el tipo de una expresión que queremos usar se corresponde con lo que pensamos.

El comando :type

Page 18: Bt haskell-1

Verificar en Haskell:

1. :type 'a'

2. :type "abcdf"

3. :type True

4. :type 4<5

5. :type "a"

6. length "perro"

7. Deducir el tipo de length

8. Verificar :type length

9. Escribir y probar en Haskell sus propias expresiones.

Page 19: Bt haskell-1

Operadores de igualdad y orden

Para todos los tipos básicos están definidos los siguientes operadores binarios:

> Mayor que >= Mayor o igual que

< Menor que <= Menor o igual que

== Igual a /= Distinto de

Observación: el tipo de los dos argumentos para cualquier aplicación de los operadores anteriores debe ser el mismo. No se pueden comparar valores de tipos distintos.

Page 20: Bt haskell-1

Escriba y evalúe las siguientes expresiones :

1) 7<0

2) 8>2

3) div 8 4 == 2

4) div 4 3 == 0

5) mod 8 4 == 0

6) not (mod 8 4 == 7)

7) 4 /=4

8) div 8 9 /= 20

9) mod 50 10 <= 0

10) div 50 10 >= 6

Page 21: Bt haskell-1

BIBLIOGRAFIA

Razonando con Haskell –Un cursos sobre programación funcional – J. Gallardo- B.Ruiz, F Gutierrez y otros - 2004

Temas de programac. Funcional - – J. Alonso Jimenez - 2011

Ejercicios de programación funcional – J. Alonso Jimenez –

Piensa en Haskell – J. Alonso Jimenes y J. Hidalgo - 2012

Material sobre Haskell- Inet- Prof. Paula Echenique - 2008

Introducción al lenguaje Haskell - José E.Labra - 1998

Programación Funcional – Jeroen Fokker – 1996

Algoritmos y Programación, guia para Haskell – A.Leon Molina 1998