Está en la página 1de 14

Programación Funcional

Instituto de Computación, Facultad de Ingenierı́a


Universidad de la República, Uruguay

InCo, Facultad de Ingenierı́a, UdelaR Programación Funcional


Definiciones y Tipos Básicos en Haskell

InCo, Facultad de Ingenierı́a, UdelaR Programación Funcional


Definición de funciones
Un programa en PF consiste esencialmente de una lista de
definiciones (de funciones) que se expresan en una notación
semejante a la usada en matemática.
Las definiciones son escritas como ecuaciones, eventualmente
acompañadas de una descripción de su tipo (signatura).
Ejemplo:
num :: Integer
num = 3 + 6
Podemos omitir la signatura y el tipo se infiere:
num = 3 + 6
Para definir funciones, especificamos sus parámetros formales
square :: Integer → Integer
square x = x ∗ x

InCo, Facultad de Ingenierı́a, UdelaR Programación Funcional


Tipado

El tipado juega un rol importante en la producción de


software confiable.

Ayuda a encontrar errores de mala formación de expresiones e


impone restricciones que van mas allá de aspectos sintácticos.

Los tipos forman parte de la especificación del sistema.

InCo, Facultad de Ingenierı́a, UdelaR Programación Funcional


Tipado en Haskell

Tipado fuerte: toda expresión debe tener un tipo. Todas las


constantes, variables, operadores y funciones tienen un tipo
asociado.

Chequeo estático de tipos: los tipos se chequean en tiempo de


compilación.

Type safety: al ejecutar, los programas bien tipados nunca se


trancan por errores de tipo

well-typed programs never “go wrong”

InCo, Facultad de Ingenierı́a, UdelaR Programación Funcional


Tipos básicos

Bool booleanos
Char caracteres simples
String cadena de caracteres
Int enteros acotados
Integer enteros no acotados
Float reales
Double reales

Nota: Los nombres de tipo en Haskell deben comenzar con


mayúscula.

InCo, Facultad de Ingenierı́a, UdelaR Programación Funcional


Booleanos

El tipo de los booleanos es Bool y sus constantes son


denotadas True y False

Las operaciones primitivas son las habituales: not, &&, ||.

exOr :: Bool → Bool → Bool


exOr x y = (x || y ) && not (x && y )

Podemos definir las funciones usando pattern matching

exOr :: Bool → Bool → Bool


exOr True y = not y
exOr False y = y

InCo, Facultad de Ingenierı́a, UdelaR Programación Funcional


Preguntas

InCo, Facultad de Ingenierı́a, UdelaR Programación Funcional


Enteros
Existen dos tipos de enteros: Int (enteros acotados) e Integer
(enteros no acotados).

Los operadores sobre enteros son los habituales:


+, −, ∗,ˆ, div , mod, abs, negate.

Los enteros pueden ser comparados por operadores


relacionales (<, >, >, ==, /=, ...).
min :: Integer → Integer → Integer
min x y = if x 6 y then x else y

La conversión entre los dos tipos de enteros se debe hacer en


forma explı́cita a través de las funciones:
fromInteger :: Integer → Int
toInteger :: Int → Integer
InCo, Facultad de Ingenierı́a, UdelaR Programación Funcional
Caracteres

Los caracteres son codificados por la tabla ASCII.

Se escriben entre comillas simples: ’a’, ’H’, ’8’.

Algunos caracteres especiales se representan de esta manera:


’\t’ tab
’\n’ newline
’\\’ backslash
’\’’ comilla simple
’\"’ comilla doble

La conversión entre un caracter y su codificación se hace a


través de las siguientes funciones:

fromEnum :: Char → Int


toEnum :: Int → Char

InCo, Facultad de Ingenierı́a, UdelaR Programación Funcional


Strings

El tipo String se define como una lista de caracteres.

Constantes de tipo String se escriben entre comillas dobles:


”Funcional”, "\tHaskell\n".

Las funciones show y read permiten convertir entre valores de


otros tipos y String .
Por ejemplo,

show (4 + 3) "7"

read "3" + 4 7

InCo, Facultad de Ingenierı́a, UdelaR Programación Funcional


Reales

Existen 2 tipos que representan los reales en punto flotante:


Float y Double.
Las operaciones sobre estos tipos son las estándar
(aritméticas, trigonométricas, etc).
Operador de división real: /
Hay funciones de conversión hacia y desde los enteros.

ceiling :: Float → Integer


floor :: Float → Integer
round :: Float → Integer

fromInteger :: Integer → Float


fromIntegral :: Int → Float

InCo, Facultad de Ingenierı́a, UdelaR Programación Funcional


Preguntas

InCo, Facultad de Ingenierı́a, UdelaR Programación Funcional


Programación Funcional

Instituto de Computación, Facultad de Ingenierı́a


Universidad de la República, Uruguay

InCo, Facultad de Ingenierı́a, UdelaR Programación Funcional

También podría gustarte