Instituto Tecnológico Superior de Huatusco
Docente: MSC. Olivia Labastida Puertos Haskell E-mail: olabastidap@huatusco.tecnm.mx
Haskell es un lenguaje funcional (donde todo se hace con llamadas a funciones), estático, implícitamente tipado (los tipos los revisa el compilador, pero no hace falta declararlos), perezoso (nada se hace hasta que es completamente necesario).
Compilador El compilador de Haskell más común es GHC. Está disponible para GNU/Linux, FreeBSD, MacOS, Windows, y Solaris. • GHC. Compila librerías y aplicaciones escritas en Haskell a código binario. • GHCI. Es un interprete que permite escribir código Haskell y obtener un resultado inmediato.
Expresiones Simples
Es
posible escribir varias expresiones matemáticas directamente en ghci y obtener un resultado. Prelude es el prompt por defecto de GHCi.
Expresiones Simples
Las cadenas van entre comillas dobles “texto”. Se puede concatenar con ++
Expresiones Simples
Las funciones se llaman colocando los argumentos directamente después del nombre de la función. No hay paréntesis en la llamada a la función:
Funciones predefinidas en Haskell
La consola
Las Acciones I/O se pueden usar para leer y escribir en la consola. putSrt | putSrtLn imprime solo cadenas Print imprime cualquier valor
La consola
La
lectura
se
puede hacer con <haske>getLine</hask> (que retorna una cadena String) o readLn
(que retorna un valor de cualquier tipo que se desee). El símbolo <- se usa para asignar un nombre
Bloque Do
Existe otra forma de escribir los bloques do. Si se suprimen las llaves y los punto y coma, la indentación se vuelve importante. Esto funciona muy bien en ghci, pero podemos intentar.
Tipos Simples
Haskell hace referencia de tipos. Generalmente no es necesario declararlos a menos que así se quiera. Si desea declarar tipos, se puede usar
Tipos Simples Existen 5 tipos númericos en el “preludio” de Haskell: •
Int. es un entero con al menos 30 bits de precisión.
•
Integer es un entero con precisión ilimitada.
•
Float es un numero de punto flotante con precisión simple.
•
Double es un numero de punto flotante con precisión
doble. •
Rational es un tipo fraccionario, sin error de redondeo.
Datos Estructurados
Los tipos de datos básicos se pueden combinar fácilmente de dos maneras: Listas, que van entre [corchetes], y tuplas, que van entre (paréntesis). Las listas se usan para mantener múltiples valores del mismo tipo.
Datos Estructurados
Las cadenas son listas de caracteres.
Datos Estructurados
Las tuplas mantienen un número fijo de valores, que pueden tener tipos distintos.
El ultimo ejemplo usa zip, una función que convierte dos listas en una lista de tuplas.
Datos Estructurados
Las listas se usan mucho en Haskell. Existen varias funciones que sirven para hacer cosas útiles con ellas.
Definición de Funciones
Otras Expresiones
La expresión let define nombres temporales. (Esto es usando layout otra vez. Se puede usar {llaves}, y separar los nombres con punto y comas, si se prefiere).
Otras Expresiones
La expresión case produce ramas de decisión. La etiqueta especial _ significa "cualquier otra cosa".
Ejercicios 1.
Definir la función media6, de tal manera que (media6 a b c d e f) es la media aritmética de los números a b c d e f. Ejemplo:
media6 15 4 2 6 7 8 = 7
Ejercicios 2. Sumar monedas de tal manera que (sumaMonedas a b c d) al sumar sea de acuerdo a las siguientes denominaciones en pesos: $.50, $1, $2, $5. Ejemplo:
sumaMonedas 0 2 4 6 = 40 sumaMonedas 2 0 0 0 = 1
Ejercicios 3. Calcular el área de un triangulo (areaTriangulo base altura). Ejemplo:
areaTriangulo 4 8 = 16
Ejercicios 4. Escribir una función maxTres tal que (maxTres x y z) determina el máximo de x, y y z. ejemplo:
maxTres 5 3 1 = 5 maxTres 7 9 5 = 9