PDF de programación - Tema 2: Introducción a la programación con Haskell - Informática (2016–17)

Tema 2: Introducción a la programación con Haskell - Informática (2016–17)gráfica de visualizaciones

Publicado el 6 de Agosto del 2017
657 visualizaciones desde el 6 de Agosto del 2017
211,7 KB
26 paginas
Creado hace 7a (12/09/2016)
Tema 2: Introducción a la programación con Haskell

Informática (2016–17)

José A. Alonso Jiménez

Grupo de Lógica Computacional

Departamento de Ciencias de la Computación e I.A.

Universidad de Sevilla

IM Tema 2: Introducción a la programación con Haskell

Tema 2: Introducción a la programación con Haskell
1. El sistema GHC
2. Iniciación a GHC

Inicio de sesión con GHCi
Cálculo aritmético
Cálculo con listas
Cálculos con errores
3. Aplicación de funciones
4. Guiones Haskell

El primer guión Haskell
Nombres de funciones
La regla del sangrado
Comentarios en Haskell

2 / 26

IM Tema 2: Introducción a la programación con Haskell

El sistema GHC

El sistema GHC

Los programa funcionales pueden evaluarse manualmente (como

en el tema anterior).

Los lenguajes funcionales evalúan automáticamente los

programas funcionales.

Haskell es un lenguaje funcional.
GHC (Glasgow Haskell Compiler) es el intérprete de Haskell que

usaremos en el curso.

3 / 26

IM Tema 2: Introducción a la programación con Haskell

Iniciació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 GHC

Inicio de sesión con GHCi
Cálculo aritmético
Cálculo con listas
Cálculos con errores

3. Aplicación de funciones

4. Guiones Haskell

4 / 26

IM Tema 2: Introducción a la programación con Haskell

Iniciación a GHC

Inicio de sesión con GHCi

Inicio de sesión

Inicio mediante ghci

I1M> ghci
GHCi, version 6.10.3: http://www.haskell.org/ghc/
Prelude>

:? for help

La llamada es Prelude>
Indica que ha cargado las definiciones básicas que forman el

preludio y el sistema está listo para leer una expresión, evaluarla y
escribir su resultado.

5 / 26

IM Tema 2: Introducción a la programación con Haskell

Iniciació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 GHC

Inicio de sesión con GHCi
Cálculo aritmético
Cálculo con listas
Cálculos con errores

3. Aplicación de funciones

4. Guiones Haskell

6 / 26

IM Tema 2: Introducción a la programación con Haskell

Iniciación a GHC

Cálculo aritmético

Cálculo aritmético: Operaciones aritméticas

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

7 / 26

IM Tema 2: Introducción a la programación con Haskell

Iniciación a GHC

Cálculo aritmético

Cálculo aritmético: Precedencia y asociatividad

Precedencia:

Prelude> 2*10^3
2000
Prelude> 2+3*4
14

Asociacitividad:

Prelude> 2^3^4
2417851639229258349412352
Prelude> 2^(3^4)
2417851639229258349412352
Prelude> 2-3-4
-5
Prelude> (2-3)-4
-5

8 / 26

IM Tema 2: Introducción a la programación con Haskell

Iniciació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 GHC

Inicio de sesión con GHCi
Cálculo aritmético
Cálculo con listas
Cálculos con errores

3. Aplicación de funciones

4. Guiones Haskell

9 / 26

IM Tema 2: Introducción a la programación con Haskell

Iniciación a GHC

Cálculo con listas

Cálculo con listas: Seleccionar y eliminar

Seleccionar el primer elemento de una lista no vacía:

head [1,2,3,4,5] 1

Eliminar el primer elemento de una lista no vacía:

tail [1,2,3,4,5] [2,3,4,5]

Seleccionar el n–ésimo elemento de una lista (empezando en 0):

[1,2,3,4,5] !! 2 3

Seleccionar los n primeros elementos de una lista:

take 3 [1,2,3,4,5] [1,2,3]

Eliminar los n primeros elementos de una lista:

drop 3 [1,2,3,4,5] [4,5]

10 / 26

IM Tema 2: Introducción a la programación con Haskell

Iniciación a GHC

Cálculo con listas

Cálculo con listas

Calcular la longitud de una lista:
length [1,2,3,4,5] 5

Calcular la suma de una lista de números:

sum [1,2,3,4,5] 15

Calcular el producto de una lista de números:

product [1,2,3,4,5] 120

Concatenar dos listas:

[1,2,3] ++ [4,5] [1,2,3,4,5]

Invertir una lista:

reverse [1,2,3,4,5] [5,4,3,2,1]

11 / 26

IM Tema 2: Introducción a la programación con Haskell

Iniciació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 GHC

Inicio de sesión con GHCi
Cálculo aritmético
Cálculo con listas
Cálculos con errores

3. Aplicación de funciones

4. Guiones Haskell

12 / 26

IM Tema 2: Introducción a la programación con Haskell

Iniciació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

13 / 26

IM Tema 2: Introducción a la programación con Haskell

Aplicación de funciones

Aplicación de funciones en matemáticas y en Haskell

Notación para funciones en matemáticas:

En matemáticas, la aplicación de funciones se representa usando

paréntesis y la multiplicación usando yuxtaposición o espacios

Ejemplo:

f (a, b) + cd

representa la suma del valor de f aplicado a a y b más el producto
de c por d.

Notación para funciones en Haskell:

En Haskell, la aplicación de funciones se representa usando

espacios y la multiplicación usando ∗.

Ejemplo:

f a b + c*d

representa la suma del valor de f aplicado a a y b más el producto
de c por d.

14 / 26

IM Tema 2: Introducción a la programación con Haskell

Aplicación de funciones

Prioridad de la aplicación de funciones

En Haskell, la aplicación de funciones tiene mayor prioridad que

los restantes operadores. Por ejemplo, la expresión Haskell
f a + b representa la expresión matemática f (a) + b.

Ejemplos de expresiones Haskell y matemáticas:

Matemáticas Haskell
f (x)
f (x , y)
f (g(x))
f (x , g(y))
f (x)g(y)

f x
f x y
f (g x)
f x (g y)
f x * g y

15 / 26

IM Tema 2: Introducción a la programación con Haskell

Guiones Haskell

Guiones Haskell

En Haskell los usuarios pueden definir funciones.
Las nuevas definiciones se definen en guiones, que son ficheros de

textos compuestos por una sucesión de definiciones.

Se acostumbra a identificar los guiones de Haskell mediante el

sufijo .hs

16 / 26

IM Tema 2: Introducción a la programación con Haskell

Guiones 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 Haskell

El primer guión Haskell
Nombres de funciones
La regla del sangrado
Comentarios en Haskell

17 / 26

IM Tema 2: Introducción a la programación con Haskell

Guiones Haskell

El primer guión Haskell

El primer guión Haskell

Iniciar emacs y abrir dos ventanas: C-x 2
En la primera ventana ejecutar Haskell: M-x run-haskell
Cambiar a la otra ventana: C-x o
Iniciar el guión: C-x C-f ejemplo.hs
Escribir en el guión las siguientes definiciones

doble x
cuadruple x = doble (doble x)

= x+x

Grabar el guión: C-x C-s
Cargar el guión en Haskell: C-c C-l
Evaluar ejemplos:

*Main> cuadruple 10
40
*Main> take (doble 2) [1,2,3,4,5,6]
[1,2,3,4]

18 / 26

IM Tema 2: Introducción a la programación con Haskell

Guiones Haskell

El primer guión Haskell

El primer guión Haskell
Volver al guión: C-x o
Añadir al guión las siguientes definiciones:

factorial n = product [1..n]
media ns

= sum ns `div` length ns

Grabar el guión: C-x s
Cargar el guión en Haskell: C-c C-l
Evaluar ejemplos:

*Main> factorial (doble 2)
24
*Main> doble (media [1,5,3])
6

19 / 26

IM Tema 2: Introducción a la programación con Haskell

Guiones 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 Haskell

El primer guión Haskell
Nombres de funciones
La regla del sangrado
Comentarios en Haskell

20 / 26

IM Tema 2: Introducción a la programación con Haskell

Guiones Haskell

Nombres de funciones

Nombres de funciones

Los nombres de funciones tienen que empezar por una letra en

minúscula. Por ejemplo,

sumaCuadrado, suma_cuadrado, suma’

Las palabras reservadas de Haskell no pueden usarse en los

nombres de funciones. Algunas palabras reservadas son
case
if
let

deriving do
infixl
then

data
in
newtype

default
infix
of

class
import
module

else

infixr instance
type

where

Se acostumbra escribir los argumentos que son listas usando s

como sufijo de su nombre. Por ejemplo,

ns representa una lista de números,
xs representa una lista de elementos,
css representa una lista de listas de caracteres.

21 / 26

IM Tema 2: Introducción a la programación con Haskell

Guiones 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 Haskell

El primer guión Haskell
Nombres de funciones
La regla del sangrado
Comentarios en Haskell

22 / 26

IM Tema 2: Introducción a la programación con Haskell

Guiones Haskell

La regla del sangrado

La regla del sangrado

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 margen
izquierdo menor o igual que el del comienzo de la definición actual.

Ejemplo:

a = b + c
where

b = 1
c = 2

d = a * 2

Consejos:

Comenzar las definiciones de las funciones en la primera columna.
Usar el tabulador en emacs para determinar el sangrado en las

definiciones.

23 / 26

IM Tema 2: Introducción a la programaci
  • Links de descarga
http://lwp-l.com/pdf6119

Comentarios de: Tema 2: Introducción a la programación con Haskell - Informática (2016–17) (0)


No hay comentarios
 

Comentar...

Nombre
Correo (no se visualiza en la web)
Valoración
Comentarios...
CerrarCerrar
CerrarCerrar
Cerrar

Tienes que ser un usuario registrado para poder insertar imágenes, archivos y/o videos.

Puedes registrarte o validarte desde aquí.

Codigo
Negrita
Subrayado
Tachado
Cursiva
Insertar enlace
Imagen externa
Emoticon
Tabular
Centrar
Titulo
Linea
Disminuir
Aumentar
Vista preliminar
sonreir
dientes
lengua
guiño
enfadado
confundido
llorar
avergonzado
sorprendido
triste
sol
estrella
jarra
camara
taza de cafe
email
beso
bombilla
amor
mal
bien
Es necesario revisar y aceptar las políticas de privacidad