![Page 1: Tema 2: Introducción a la programación con Haskell](https://reader034.vdocuments.pub/reader034/viewer/2022052218/5550f462b4c90501448b4656/html5/thumbnails/1.jpg)
Tema 2: Introducción a la programación con HaskellInformática (2010–11)
José A. Alonso Jiménez
Grupo de Lógica ComputacionalDepartamento de Ciencias de la Computación e I.A.
Universidad de Sevilla
![Page 2: Tema 2: Introducción a la programación con Haskell](https://reader034.vdocuments.pub/reader034/viewer/2022052218/5550f462b4c90501448b4656/html5/thumbnails/2.jpg)
IM Tema 2: Introducción a la programación con Haskell
Tema 2: Introducción a la programación con Haskell1. El sistema GHC
2. Iniciación a GHCInicio de sesión con GHCiCálculo aritméticoCálculo con listasCálculos con errores
3. Aplicación de funciones
4. Guiones HaskellEl primer guión HaskellNombres de funcionesLa regla del sangradoComentarios en Haskell
2 / 30
![Page 3: Tema 2: Introducción a la programación con Haskell](https://reader034.vdocuments.pub/reader034/viewer/2022052218/5550f462b4c90501448b4656/html5/thumbnails/3.jpg)
IM Tema 2: Introducción a la programación con HaskellEl sistema GHC
Tema 2: Introducción a la programación con Haskell
1. El sistema GHC
2. Iniciación a GHC
3. Aplicación de funciones
4. Guiones Haskell
3 / 30
![Page 4: Tema 2: Introducción a la programación con Haskell](https://reader034.vdocuments.pub/reader034/viewer/2022052218/5550f462b4c90501448b4656/html5/thumbnails/4.jpg)
IM Tema 2: Introducción a la programación con HaskellEl sistema GHC
El sistema GHCI Los programa funcionales pueden evaluarse manualmente (como
en el tema anterior).I Los lenguajes funcionales evalúan automáticamente los
programas funcionales.I Haskell es un lenguaje funcional.I GHC (Glasgow Haskell Compiler) es el intérprete de Haskell que
usaremos en el curso.
4 / 30
![Page 5: Tema 2: Introducción a la programación con Haskell](https://reader034.vdocuments.pub/reader034/viewer/2022052218/5550f462b4c90501448b4656/html5/thumbnails/5.jpg)
IM Tema 2: Introducción a la programación con HaskellIniciación a GHC
Tema 2: Introducción a la programación con Haskell
1. El sistema GHC
2. Iniciación a GHCInicio de sesión con GHCiCálculo aritméticoCálculo con listasCálculos con errores
3. Aplicación de funciones
4. Guiones Haskell
5 / 30
![Page 6: Tema 2: Introducción a la programación con Haskell](https://reader034.vdocuments.pub/reader034/viewer/2022052218/5550f462b4c90501448b4656/html5/thumbnails/6.jpg)
IM Tema 2: Introducción a la programación con HaskellIniciación a GHC
Inicio de sesión con GHCi
Tema 2: Introducción a la programación con Haskell
1. El sistema GHC
2. Iniciación a GHCInicio de sesión con GHCiCálculo aritméticoCálculo con listasCálculos con errores
3. Aplicación de funciones
4. Guiones Haskell
6 / 30
![Page 7: Tema 2: Introducción a la programación con Haskell](https://reader034.vdocuments.pub/reader034/viewer/2022052218/5550f462b4c90501448b4656/html5/thumbnails/7.jpg)
IM Tema 2: Introducción a la programación con HaskellIniciación a GHC
Inicio de sesión con GHCi
Inicio de sesiónI Inicio mediante ghci
I1M> ghci
GHCi, version 6.10.3: http://www.haskell.org/ghc/ :? for help
Prelude>
I La llamada es Prelude>I Indica que ha cargado las definiciones básicas que forman el
preludio y el sistema está listo para leer una expresión, evaluarla yescribir su resultado.
7 / 30
![Page 8: Tema 2: Introducción a la programación con Haskell](https://reader034.vdocuments.pub/reader034/viewer/2022052218/5550f462b4c90501448b4656/html5/thumbnails/8.jpg)
IM Tema 2: Introducción a la programación con HaskellIniciación a GHC
Cálculo aritmético
Tema 2: Introducción a la programación con Haskell
1. El sistema GHC
2. Iniciación a GHCInicio de sesión con GHCiCálculo aritméticoCálculo con listasCálculos con errores
3. Aplicación de funciones
4. Guiones Haskell
8 / 30
![Page 9: Tema 2: Introducción a la programación con Haskell](https://reader034.vdocuments.pub/reader034/viewer/2022052218/5550f462b4c90501448b4656/html5/thumbnails/9.jpg)
IM Tema 2: Introducción a la programación con HaskellIniciación a GHC
Cálculo aritmético
Cálculo aritmético: Operaciones aritméticasI Operaciones aritméticas en Haskell:
Prelude> 2+3
5
Prelude> 2-3
-1
Prelude> 2*3
6
Prelude> 7 `div` 2
3
Prelude> 2^3
8
9 / 30
![Page 10: Tema 2: Introducción a la programación con Haskell](https://reader034.vdocuments.pub/reader034/viewer/2022052218/5550f462b4c90501448b4656/html5/thumbnails/10.jpg)
IM Tema 2: Introducción a la programación con HaskellIniciación a GHC
Cálculo aritmético
Cálculo aritmético: Precedencia y asociatividadI Precedencia:
Prelude> 2*10^3
2000
Prelude> 2+3*4
14
I Asociacitividad:Prelude> 2^3^4
2417851639229258349412352
Prelude> 2^(3^4)
2417851639229258349412352
Prelude> 2-3-4
-5
Prelude> (2-3)-4
-5
10 / 30
![Page 11: Tema 2: Introducción a la programación con Haskell](https://reader034.vdocuments.pub/reader034/viewer/2022052218/5550f462b4c90501448b4656/html5/thumbnails/11.jpg)
IM Tema 2: Introducción a la programación con HaskellIniciación a GHC
Cálculo con listas
Tema 2: Introducción a la programación con Haskell
1. El sistema GHC
2. Iniciación a GHCInicio de sesión con GHCiCálculo aritméticoCálculo con listasCálculos con errores
3. Aplicación de funciones
4. Guiones Haskell
11 / 30
![Page 12: Tema 2: Introducción a la programación con Haskell](https://reader034.vdocuments.pub/reader034/viewer/2022052218/5550f462b4c90501448b4656/html5/thumbnails/12.jpg)
IM Tema 2: Introducción a la programación con HaskellIniciación a GHC
Cálculo con listas
Cálculo con listas: Seleccionar y eliminarI Seleccionar el primer elemento de una lista no vacía:
head [1,2,3,4,5] 1
I Eliminar el primer elemento de una lista no vacía:tail [1,2,3,4,5] [2,3,4,5]
I Seleccionar el n–ésimo elemento de una lista (empezando en 0):[1,2,3,4,5] !! 2 3
I Seleccionar los n primeros elementos de una lista:take 3 [1,2,3,4,5] [1,2,3]
I Eliminar los n primeros elementos de una lista:drop 3 [1,2,3,4,5] [4,5]
12 / 30
![Page 13: Tema 2: Introducción a la programación con Haskell](https://reader034.vdocuments.pub/reader034/viewer/2022052218/5550f462b4c90501448b4656/html5/thumbnails/13.jpg)
IM Tema 2: Introducción a la programación con HaskellIniciación a GHC
Cálculo con listas
Cálculo con listasI Calcular la longitud de una lista:
length [1,2,3,4,5] 5
I Calcular la suma de una lista de números:sum [1,2,3,4,5] 15
I Calcular el producto de una lista de números:product [1,2,3,4,5] 120
I Concatenar dos listas:[1,2,3] ++ [4,5] [1,2,3,4,5]
I Invertir una lista:reverse [1,2,3,4,5] [5,4,3,2,1]
13 / 30
![Page 14: Tema 2: Introducción a la programación con Haskell](https://reader034.vdocuments.pub/reader034/viewer/2022052218/5550f462b4c90501448b4656/html5/thumbnails/14.jpg)
IM Tema 2: Introducción a la programación con HaskellIniciación a GHC
Cálculos con errores
Tema 2: Introducción a la programación con Haskell
1. El sistema GHC
2. Iniciación a GHCInicio de sesión con GHCiCálculo aritméticoCálculo con listasCálculos con errores
3. Aplicación de funciones
4. Guiones Haskell
14 / 30
![Page 15: Tema 2: Introducción a la programación con Haskell](https://reader034.vdocuments.pub/reader034/viewer/2022052218/5550f462b4c90501448b4656/html5/thumbnails/15.jpg)
IM Tema 2: Introducción a la programación con HaskellIniciación a GHC
Cálculos con errores
Ejemplos de cálculos con errores
Prelude> 1 `div` 0
*** Exception: divide by zero
Prelude> head []
*** Exception: Prelude.head: empty list
Prelude> tail []
*** Exception: Prelude.tail: empty list
Prelude> [2,3] !! 5
*** Exception: Prelude.(!!): index too large
15 / 30
![Page 16: Tema 2: Introducción a la programación con Haskell](https://reader034.vdocuments.pub/reader034/viewer/2022052218/5550f462b4c90501448b4656/html5/thumbnails/16.jpg)
IM Tema 2: Introducción a la programación con HaskellAplicación de funciones
Tema 2: Introducción a la programación con Haskell
1. El sistema GHC
2. Iniciación a GHC
3. Aplicación de funciones
4. Guiones Haskell
16 / 30
![Page 17: Tema 2: Introducción a la programación con Haskell](https://reader034.vdocuments.pub/reader034/viewer/2022052218/5550f462b4c90501448b4656/html5/thumbnails/17.jpg)
IM Tema 2: Introducción a la programación con HaskellAplicación de funciones
Aplicación de funciones en matemáticas y en HaskellI Notación para funciones en matemáticas:
I En matemáticas, la aplicación de funciones se representa usandoparéntesis y la multiplicación usando yuxtaposición o espacios
I Ejemplo:f (a, b) + cd
representa la suma del valor de f aplicado a a y b más el productode c por d .
I Notación para funciones en Haskell:I En Haskell, la aplicación de funciones se representa usando
espacios y la multiplicación usando ∗.I Ejemplo:
f a b + c*drepresenta la suma del valor de f aplicado a a y b más el productode c por d.
17 / 30
![Page 18: Tema 2: Introducción a la programación con Haskell](https://reader034.vdocuments.pub/reader034/viewer/2022052218/5550f462b4c90501448b4656/html5/thumbnails/18.jpg)
IM Tema 2: Introducción a la programación con HaskellAplicación de funciones
Prioridad de la aplicación de funcionesI En Haskell, la aplicación de funciones tiene mayor prioridad que
los restantes operadores. Por ejemplo, la expresión Haskellf a + b representa la expresión matemática f (a) + b.
I Ejemplos de expresiones Haskell y matemáticas:
Matemáticas Haskellf (x) f xf (x , y) f x yf (g(x)) f (g x)f (x , g(y)) f x (g y)f (x)g(y) f x * g y
18 / 30
![Page 19: Tema 2: Introducción a la programación con Haskell](https://reader034.vdocuments.pub/reader034/viewer/2022052218/5550f462b4c90501448b4656/html5/thumbnails/19.jpg)
IM Tema 2: Introducción a la programación con HaskellGuiones Haskell
Tema 2: Introducción a la programación con Haskell
1. El sistema GHC
2. Iniciación a GHC
3. Aplicación de funciones
4. Guiones HaskellEl primer guión HaskellNombres de funcionesLa regla del sangradoComentarios en Haskell
19 / 30
![Page 20: Tema 2: Introducción a la programación con Haskell](https://reader034.vdocuments.pub/reader034/viewer/2022052218/5550f462b4c90501448b4656/html5/thumbnails/20.jpg)
IM Tema 2: Introducción a la programación con HaskellGuiones Haskell
Guiones HaskellI En Haskell los usuarios pueden definir funciones.I Las nuevas definiciones se definen en guiones, que son ficheros de
textos compuestos por una sucesión de definiciones.I Se acostumbra a identificar los guiones de Haskell mediante el
sufijo .hs
20 / 30
![Page 21: Tema 2: Introducción a la programación con Haskell](https://reader034.vdocuments.pub/reader034/viewer/2022052218/5550f462b4c90501448b4656/html5/thumbnails/21.jpg)
IM Tema 2: Introducción a la programación con HaskellGuiones Haskell
El primer guión Haskell
Tema 2: Introducción a la programación con Haskell
1. El sistema GHC
2. Iniciación a GHC
3. Aplicación de funciones
4. Guiones HaskellEl primer guión HaskellNombres de funcionesLa regla del sangradoComentarios en Haskell
21 / 30
![Page 22: Tema 2: Introducción a la programación con Haskell](https://reader034.vdocuments.pub/reader034/viewer/2022052218/5550f462b4c90501448b4656/html5/thumbnails/22.jpg)
IM Tema 2: Introducción a la programación con HaskellGuiones Haskell
El primer guión Haskell
El primer guión HaskellI Iniciar emacs y abrir dos ventanas: C-x 2I En la primera ventana ejecutar Haskell: M-x run-haskellI Cambiar a la otra ventana: C-x oI Iniciar el guión: C-x C-f ejemplo.hsI Escribir en el guión las siguientes definiciones
doble x = x+x
cuadruple x = doble (doble x)
I Grabar el guión: C-x C-sI Cargar el guión en Haskell: C-c C-lI Evaluar ejemplos:
*Main> cuadruple 10
40
*Main> take (doble 2) [1,2,3,4,5,6]
[1,2,3,4] 22 / 30
![Page 23: Tema 2: Introducción a la programación con Haskell](https://reader034.vdocuments.pub/reader034/viewer/2022052218/5550f462b4c90501448b4656/html5/thumbnails/23.jpg)
IM Tema 2: Introducción a la programación con HaskellGuiones Haskell
El primer guión Haskell
El primer guión HaskellI Volver al guión: C-x oI Añadir al guión las siguientes definiciones:
factorial n = product [1..n]
media ns = sum ns `div` length ns
I Grabar el guión: C-x sI Cargar el guión en Haskell: C-c C-lI Evaluar ejemplos:
*Main> factorial (doble 2)
24
*Main> doble (media [1,5,3])
6
23 / 30
![Page 24: Tema 2: Introducción a la programación con Haskell](https://reader034.vdocuments.pub/reader034/viewer/2022052218/5550f462b4c90501448b4656/html5/thumbnails/24.jpg)
IM Tema 2: Introducción a la programación con HaskellGuiones Haskell
Nombres de funciones
Tema 2: Introducción a la programación con Haskell
1. El sistema GHC
2. Iniciación a GHC
3. Aplicación de funciones
4. Guiones HaskellEl primer guión HaskellNombres de funcionesLa regla del sangradoComentarios en Haskell
24 / 30
![Page 25: Tema 2: Introducción a la programación con Haskell](https://reader034.vdocuments.pub/reader034/viewer/2022052218/5550f462b4c90501448b4656/html5/thumbnails/25.jpg)
IM Tema 2: Introducción a la programación con HaskellGuiones Haskell
Nombres de funciones
Nombres de funcionesI Los nombres de funciones tienen que empezar por una letra en
minúscula. Por ejemplo,I sumaCuadrado, suma_cuadrado, suma’
I Las palabras reservadas de Haskell no pueden usarse en losnombres de funciones. Algunas palabras reservadas soncase class data default deriving do else
if import in infix infixl infixr instance
let module newtype of then type where
I Se acostumbra escribir los argumentos que son listas usando scomo sufijo de su nombre. Por ejemplo,
I ns representa una lista de números,I xs representa una lista de elementos,I css representa una lista de listas de caracteres.
25 / 30
![Page 26: Tema 2: Introducción a la programación con Haskell](https://reader034.vdocuments.pub/reader034/viewer/2022052218/5550f462b4c90501448b4656/html5/thumbnails/26.jpg)
IM Tema 2: Introducción a la programación con HaskellGuiones Haskell
La regla del sangrado
Tema 2: Introducción a la programación con Haskell
1. El sistema GHC
2. Iniciación a GHC
3. Aplicación de funciones
4. Guiones HaskellEl primer guión HaskellNombres de funcionesLa regla del sangradoComentarios en Haskell
26 / 30
![Page 27: Tema 2: Introducción a la programación con Haskell](https://reader034.vdocuments.pub/reader034/viewer/2022052218/5550f462b4c90501448b4656/html5/thumbnails/27.jpg)
IM Tema 2: Introducción a la programación con HaskellGuiones Haskell
La regla del sangrado
La regla del sangradoI En Haskell la disposición del texto del programa (el sangrado)
delimita las definiciones mediante la siguiente regla:Una definición acaba con el primer trozo de código con un margenizquierdo menor o igual que el del comienzo de la definición actual.
I Ejemplo:
a = b + c
where
b = 1
c = 2
d = a * 2
I Consejos:I Comenzar las definiciones de las funciones en la primera columna.I Usar el tabulador en emacs para determinar el sangrado en las
definiciones.27 / 30
![Page 28: Tema 2: Introducción a la programación con Haskell](https://reader034.vdocuments.pub/reader034/viewer/2022052218/5550f462b4c90501448b4656/html5/thumbnails/28.jpg)
IM Tema 2: Introducción a la programación con HaskellGuiones Haskell
Comentarios en Haskell
Tema 2: Introducción a la programación con Haskell
1. El sistema GHC
2. Iniciación a GHC
3. Aplicación de funciones
4. Guiones HaskellEl primer guión HaskellNombres de funcionesLa regla del sangradoComentarios en Haskell
28 / 30
![Page 29: Tema 2: Introducción a la programación con Haskell](https://reader034.vdocuments.pub/reader034/viewer/2022052218/5550f462b4c90501448b4656/html5/thumbnails/29.jpg)
IM Tema 2: Introducción a la programación con HaskellGuiones Haskell
Comentarios en Haskell
Comentarios en HaskellI En los guiones Haskell pueden incluirse comentarios.I Un comentario simple comienza con -- y se extiende hasta el
final de la línea.I Ejemplo de comentario simple:
-- (factorial n) es el factorial del número n.
factorial n = product [1..n]
I Un comentario anidado comienza con {- y termina en -}I Ejemplo de comentario anidado:
{- (factorial n) es el factorial del número n.
Por ejemplo, factorial 3 == 6 -}
factorial n = product [1..n]
29 / 30
![Page 30: Tema 2: Introducción a la programación con Haskell](https://reader034.vdocuments.pub/reader034/viewer/2022052218/5550f462b4c90501448b4656/html5/thumbnails/30.jpg)
IM Tema 2: Introducción a la programación con HaskellBibliografía
Bibliografía1. R. Bird. Introducción a la programación funcional con Haskell.
Prentice Hall, 2000.I Cap. 1: Conceptos fundamentales.
2. G. Hutton Programming in Haskell. Cambridge University Press,2007.
I Cap. 2: First steps.3. B. O’Sullivan, D. Stewart y J. Goerzen Real World Haskell.
O’Reilly, 2008.I Cap. 1: Getting Started.
4. B. Pope y A. van IJzendoorn A Tour of the Haskell Prelude(basic functions)
5. B.C. Ruiz, F. Gutiérrez, P. Guerrero y J.E. Gallardo. Razonandocon Haskell. Thompson, 2004.
I Cap. 2: Introducción a Haskell.6. S. Thompson. Haskell: The Craft of Functional Programming,
Second Edition. Addison-Wesley, 1999.I Cap. 2: Getting started with Haskell and Hugs. 30 / 30