02_introducion_haskell
Páginas: 15 (3639 palabras)
Publicado: 30 de octubre de 2015
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
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:
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
8Expresi´on Condicional
Expresi´on Condicional:
if
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:
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.