02_introducion_haskell

Páginas: 15 (3639 palabras) Publicado: 30 de octubre de 2015
Haskell
Introducci´on

1

Valores, Tipos, Expresiones
Los valores son entidades abstractas que podemos considerar
como la respuesta a un c´alculo
5

-1

8

Cada valor tiene asociado un tipo ( :: )
2 :: Int

Int



{...-3,-2,-1,0,1,2,3...}

Las expresiones son t´erminos construidos a partir de valores
(2*3)+(4-5)

La reducci´
on o evaluaci´
on de una expresi´on consiste en aplicaruna serie de reglas que transforman la expresi´on en un valor
(2*3)+(4-5) −→ 6+(4-5) −→ 6+(-1) −→ 6-1 −→ 5

2

Valores, Tipos, Expresiones (II)
Un valor es una expresi´on irreducible
Toda expresi´on tiene un tipo: el tipo del valor que resulta de
reducir la expresi´on (Sistema Fuertemente Tipado).
(2*3)+(4-5) :: Int

El tipo de una expresi´on debe establecerse en tiempo de
compilaci´on sin evaluarla expresi´
on (Tipado Est´
atico)
El compilador calcula el tipo de una expresi´on, normalmente,
sin ninguna anotaci´on del programador (Inferencia de Tipos)
Las funciones tambi´en son valores (y por lo tanto tendr´an tipo)

3

Tipos B´asicos
Int, subconjunto de los enteros (normalmente, los enteros
representables por una palabra del procesador): 2, -1...
Integer, enteros (precisi´on absoluta)Char, caracteres: ’a’,’5’, ’\n’, ’\xF4’...
Float/Double, n´
umeros en punto flotante de simple/doble
precisi´on: 3.14159, 2, 2.5e+2...
String, cadenas de caracteres: "hola", ...
Bool, booleanos: True, False

4

Definiciones
Asociamos identificador y expresi´on ( = )
x = (2*3)+(4-5)
y = x^2

Opcionalmente, podemos incluir una anotaci´
on de tipo:
x :: Int
x = (2*3)+(4-5)

A pesar de queson inferidas autom´aticamente, las anotaciones
de tipo se suelen a˜
nadir para ciertas definiciones por:
• Documentaci´on
• Localizaci´on de errores
• Facilitar optimizaci´on (sobrecarga)

5

Definici´on local let...in
Definici´on local:

let = in

let x = 2*3 in x+1

La definici´on local es una expresi´
on, cuyo tipo es el de e2
(let x = 2*3 in x+1) + 5

Sem´antica: Sustituimosid por su definici´on e1 en e2
let x = 2*3 in x+1 −→ x+1[2*3/x] −→ (2*3)+1 −→ 7
´
Ambito
de la definici´on
let x = 1 in let y = 2 in x+y

6

y

x

Definici´on local where
Definici´on local:

where =

x+1 where x = 2*3

Ambig¨
uedad entre let...in y where
x where

let x = 5 in x*x

x let...in

where x = 6

Se permite definir m´
ultiples identificadores simult´aneamente:
let x =5

x+y where x = 5

y = 6

y = 6

in x+y

7

Regla del Contexto
Las declaraciones de una definici´on local, se delimitan con
llaves ({}), y punto y coma (;)
a+b where { a=5; b=4 }

Opcionalmente, podemos usar el contexto como delimitador
a+b where a=5
b=4

El contexto se puede usar en cualquier lista de declaraciones de
let..in, where, y case
let y = 7
x = y where y = 8
z = 4
z = 2
in y+x+z

8 Expresi´on Condicional
Expresi´on Condicional:

if then else

if 2+3==5 then "ho.else "la"

Sem´antica:
• Si e1 −→ True entonces if... −→ e2
• Si e1 −→ False entonces if... −→ e3
if 2+3==5 then ho else la −→ ho

La guardia de la expresi´on condicional debe ser de tipo Bool
Las ramas then y else deben tener igual tipo
El tipo de la expresi´on condicional es el tipo de la ramathen

9

Funciones
Funci´on matem´atica: Transparencia Referencial (f x = f x)
Definici´on: on> = on>
sucesor x = x+1
cuadrado y = y*y

Una funci´on que toma como argumento algo de tipo T1 y lo
transforma en algo de tipo T2 tiene por tipo T1 → T2
sucesor :: Int ->Int

La aplicaci´on de una funci´on f a e (f e) se define como la
sustituci´on del argumento de f por e en elcuerpo de f
sucesor 5 −→ x+1[5/x] −→ 5+1 −→ 6

10

Funciones (II)
Todas las definiciones dentro del mismo contexto son
mutuamente recursivas:
f x = g (x-1)
g x = if x == 0 then 0 else f (x-1)
f 3 −→ g 2 −→ f 1 −→ g 0 −→ 0
f 4 −→ g 3 −→ f 2 −→ g 1 −→ f 0 −→ g (-1) −→ . . .

Si f no est´a definida en x, decimos que f x = ⊥
Funci´on an´onima: \ ->
(\x ->x+2) 4 −→ x+2[4/x] −→ 4+2 −→ 6...
Leer documento completo

Regístrate para leer el documento completo.

Conviértase en miembro formal de Buenas Tareas

INSCRÍBETE - ES GRATIS