haskell
ıtulo 2. Introducci´n a Haskell
o
Introducci´n a Haskell
o
El lenguaje Haskell
• Haskell es un lenguaje funcional puro, no
estricto y fuertemente tipificado.
Puro = transparencia referencial:
No estricto = usa un orden no aplicativo
(Evaluaci´n perezosa).
o
tipificaci´n fuerte = los elementos del leno
guaje utilizables est´n clasificados en distintas caa
tegor´ o tipos.
ıas
•Un programa consiste en definiciones de funciones.
Declararla: indicar el tipo
Definirla: dar el m´todo de computo.
e
• Los principales tipos de datos b´sicos predea
finidos en Haskell son: Char, Int, Integer ,
Float, Double y Bool .
9
– – Un ejemplo de fichero Haskell
– – Calcula el siguiente entero al argumento
sucesor :: Integer → Integer
sucesor x = x + 1
– – Calcula la suma de loscuadrados de sus dos argumentos
sumaCuadrados
:: Integer → Integer → Integer
sumaCuadrados x y = x ∗ x + y ∗ y
Cap´
ıtulo 2. Introducci´n a Haskell
o
10
Funciones y operadores
Tipos simples predefinidos
El tipo Bool
Constructores: True y False
(+), (−), (∗) :: Int → Int → Int.
(↑) :: Int → Int → Int.
div , mod :: Int → Int → Int.
abs :: Int → Int.
Funciones yoperadores
signum :: Int → Int.
(& :: Bool → Bool → Bool .
&)
negate :: Int → Int.
(||) :: Bool → Bool → Bool .
even, odd :: Int → Bool .
not :: Bool → Bool .
• Podemos definir una funci´n que a partir de la
o
relaci´n
o
otherwise :: Bool .
El tipo Int
N´meros enteros de precisi´n limitada que cubren
u
o
29 29
al menos el rango [−2 , 2 − 1].
Prelude> minBound :: Int
−2147483648 :: Int
Prelude> maxBound :: Int
2147483647 :: Int
(x + y) + |x − y|
2
calcule el m´ximo de sus argumentos
a
m´ximo (x, y) =
a
m´ximo
a
:: Int → Int → Int
m´ximo x y = ((x + y) + abs(x − y)) ‘div ‘ 2
a
Cap´
ıtulo 2. Introducci´n a Haskell
o
El tipo Integer
• Los valores de este tipo son n´meros enteros
u
de precisi´n ilimitada.
o
Mismas operaciones que paraInt.
11
atan2 :: Float → Float → Float.
log, log10, exp :: Float → Float.
sqrt :: Float → Float.
...
Prelude> 2 ↑ 100
1267650600228229401496703205376 :: Integer
El tipo Double
El tipo F loat
• N´meros reales con mayor precisi´n que Float
u
o
y las mismas operaciones.
• Representan n´meros reales.
u
En notaci´n habitual: − 5.3, 1.0 ´ 1.
o
o
En notaci´n cient´
oıfica: 1.5e7 ´ 1.5e − 17
o
Funciones y operadores
El tipo Char
• Representan caracteres ( a , 1 , ? )
Algunos caracteres especiales se escriben precedi´ndolos del car´cter \:
e
a
\ n , \ t , \ , \ ” , \\
(+), (∗), (−), (/)
Funciones
:: Float → Float → Float.
(↑) :: Float → Int → Float.
(∗∗) :: Float → Float → Float.
sin, asin, cos, acos, tan, atan
:: Float → Float.
ord :: Char →Int.
chr :: Int → Char .
isUpper , isLower , isDigit, isAlpha :: Char → Bool .
toUpper , toLower :: Char → Char .
Cap´
ıtulo 2. Introducci´n a Haskell
o
Operadores de igualdad y orden
Para todos los tipos b´sicos comentados est´n
a
a
definidos los siguientes operadores binarios que
devuelven un valor booleano:
(>)
(≥)
( 10 ≤ 15
True :: Bool
Prelude> x == y
False :: BoolPrelude> x = y
True :: Bool
Prelude> b > a
True :: Bool
Prelude> False < True
True :: Bool
12
Prelude> (1 < 5) & (10 > 9)
&
True :: Bool
Prelude> True < a
ERROR
∗ ∗ ∗ Expression
∗ ∗ ∗ Term
∗ ∗ ∗ Type
∗ ∗ ∗ Does not match
:
:
:
:
:
Type error in application
True < a
True
Bool
Char
Cap´
ıtulo 2. Introducci´n a Haskell
o
13
Constructores de tipo predefinidosHaskell define tipos estructurados que permiten representar colecciones de objetos.
Tuplas
Una tupla es un dato compuesto donde el tipo de cada componente puede ser distinto.
Tuplas
Si v1, v2, . . . , vn son valores con tipo t1, t2, . . . , tn
entonces (v1 , v2, . . . , vn) es una tupla con tipo (t1, t2, . . . , tn)
Prelude> ()
() :: ()
Prelude> ( a , True)
( a , True) :: (Char , Bool )...
Regístrate para leer el documento completo.