PDF de programación - Tema 1: Introducción a la programación funcional - Informática (2016–17)

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

Publicado el 6 de Agosto del 2017
417 visualizaciones desde el 6 de Agosto del 2017
201,6 KB
35 paginas
Creado hace 3a (12/09/2016)
Tema 1: Introducción a la programación funcional

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 1: Introducción a la programación funcional

Tema 1: Introducción a la programación funcional

1. Funciones

2. Programación funcional

3. Rasgos característicos de Haskell

4. Antecedentes históricos

5. Presentación de Haskell

2 / 16

IM Tema 1: Introducción a la programación funcional

Funciones

Funciones en Haskell

En Haskell, una función es una aplicación que toma uno o más

argumentos y devuelve un valor.

En Haskell, las funciones se definen mediante ecuaciones
formadas por el nombre de la función, los nombres de los
argumentos y el cuerpo que especifica cómo se calcula el valor a
partir de los argumentos.

Ejemplo de definición de función en Haskell:

doble x = x + x

Ejemplo de evaluación:

doble 3
= 3 + 3
= 6

[def. de doble]
[def. de +]

3 / 16

IM Tema 1: Introducción a la programación funcional

Funciones

Funciones en Haskell

En Haskell, una función es una aplicación que toma uno o más

argumentos y devuelve un valor.

En Haskell, las funciones se definen mediante ecuaciones
formadas por el nombre de la función, los nombres de los
argumentos y el cuerpo que especifica cómo se calcula el valor a
partir de los argumentos.

Ejemplo de definición de función en Haskell:

doble x = x + x

Ejemplo de evaluación:

doble 3
= 3 + 3
= 6

[def. de doble]
[def. de +]

3 / 16

IM Tema 1: Introducción a la programación funcional

Funciones

Evaluaciones de funciones en Haskell
Ejemplo de evaluación anidada impaciente:

doble (doble 3)
= doble (3 + 3)
= doble 6
= 6 + 6
= 12

[def. de doble]
[def. de +]
[def. de doble]
[def. de +]

Ejemplo de evaluación anidada perezosa:

doble (doble 3)

= (doble 3) + (doble 3)
= (3 +3) + (doble 3)
= 6 + (doble 3)
= 6 + (3 + 3)
= 6 + 6
= 12

[def. de doble]
[def. de doble]
[def. de +]
[def. de doble]
[def. de +]
[def. de +]

4 / 16

IM Tema 1: Introducción a la programación funcional

Funciones

Evaluaciones de funciones en Haskell
Ejemplo de evaluación anidada impaciente:

doble (doble 3)
= doble (3 + 3)
= doble 6
= 6 + 6
= 12

[def. de doble]
[def. de +]
[def. de doble]
[def. de +]

Ejemplo de evaluación anidada perezosa:

doble (doble 3)

= (doble 3) + (doble 3)
= (3 +3) + (doble 3)
= 6 + (doble 3)
= 6 + (3 + 3)
= 6 + 6
= 12

[def. de doble]
[def. de doble]
[def. de +]
[def. de doble]
[def. de +]
[def. de +]

4 / 16

IM Tema 1: Introducción a la programación funcional

Funciones

Comprobación de propiedades

Propiedad: El doble de x más y es el doble de x más el doble de y
Expresión de la propiedad:

prop_doble x y = doble (x+y) == (doble x) + (doble y)

Comprobación de la propiedad con QuickCheck:

*Main> quickCheck prop_doble
+++ OK, passed 100 tests.

Para usar QuickCheck hay que importarlo, escribiendo al principio

del fichero

import Test.QuickCheck

5 / 16

IM Tema 1: Introducción a la programación funcional

Funciones

Comprobación de propiedades

Propiedad: El doble de x más y es el doble de x más el doble de y
Expresión de la propiedad:

prop_doble x y = doble (x+y) == (doble x) + (doble y)

Comprobación de la propiedad con QuickCheck:

*Main> quickCheck prop_doble
+++ OK, passed 100 tests.

Para usar QuickCheck hay que importarlo, escribiendo al principio

del fichero

import Test.QuickCheck

5 / 16

IM Tema 1: Introducción a la programación funcional

Funciones

Comprobación de propiedades

Propiedad: El doble de x más y es el doble de x más el doble de y
Expresión de la propiedad:

prop_doble x y = doble (x+y) == (doble x) + (doble y)

Comprobación de la propiedad con QuickCheck:

*Main> quickCheck prop_doble
+++ OK, passed 100 tests.

Para usar QuickCheck hay que importarlo, escribiendo al principio

del fichero

import Test.QuickCheck

5 / 16

IM Tema 1: Introducción a la programación funcional

Funciones

Comprobación de propiedades

Propiedad: El doble de x más y es el doble de x más el doble de y
Expresión de la propiedad:

prop_doble x y = doble (x+y) == (doble x) + (doble y)

Comprobación de la propiedad con QuickCheck:

*Main> quickCheck prop_doble
+++ OK, passed 100 tests.

Para usar QuickCheck hay que importarlo, escribiendo al principio

del fichero

import Test.QuickCheck

5 / 16

IM Tema 1: Introducción a la programación funcional

Funciones

Refutación de propiedades

Propiedad: El producto de dos números cualequiera es distinto de

su suma.

Expresión de la propiedad:

prop_prod_suma x y = x*y /= x+y

Refutación de la propiedad con QuickCheck:

*Main> quickCheck prop_prod_suma
*** Failed! Falsifiable (after 1 test):
0
0

6 / 16

IM Tema 1: Introducción a la programación funcional

Funciones

Refutación de propiedades

Propiedad: El producto de dos números cualequiera es distinto de

su suma.

Expresión de la propiedad:

prop_prod_suma x y = x*y /= x+y

Refutación de la propiedad con QuickCheck:

*Main> quickCheck prop_prod_suma
*** Failed! Falsifiable (after 1 test):
0
0

6 / 16

IM Tema 1: Introducción a la programación funcional

Funciones

Refutación de propiedades

Propiedad: El producto de dos números cualequiera es distinto de

su suma.

Expresión de la propiedad:

prop_prod_suma x y = x*y /= x+y

Refutación de la propiedad con QuickCheck:

*Main> quickCheck prop_prod_suma
*** Failed! Falsifiable (after 1 test):
0
0

6 / 16

IM Tema 1: Introducción a la programación funcional

Funciones

Refutación de propiedades

Refinamiento: El producto de dos números no nulos cualequiera

es distinto de su suma.

prop_prod_suma' x y =

x /= 0 && y /= 0 ==> x*y /= x+y
Refutación de la propiedad con QuickCheck:

*Main> quickCheck prop_prod_suma'
+++ OK, passed 100 tests.
*Main> quickCheck prop_prod_suma'
*** Failed! Falsifiable (after 5 tests):
2
2

7 / 16

IM Tema 1: Introducción a la programación funcional

Funciones

Refutación de propiedades

Refinamiento: El producto de dos números no nulos cualequiera

es distinto de su suma.

prop_prod_suma' x y =

x /= 0 && y /= 0 ==> x*y /= x+y
Refutación de la propiedad con QuickCheck:

*Main> quickCheck prop_prod_suma'
+++ OK, passed 100 tests.
*Main> quickCheck prop_prod_suma'
*** Failed! Falsifiable (after 5 tests):
2
2

7 / 16

IM Tema 1: Introducción a la programación funcional

Funciones

Refutación de propiedades

Refinamiento: El producto de dos números no nulos cualequiera

es distinto de su suma.

prop_prod_suma' x y =

x /= 0 && y /= 0 ==> x*y /= x+y
Refutación de la propiedad con QuickCheck:

*Main> quickCheck prop_prod_suma'
+++ OK, passed 100 tests.
*Main> quickCheck prop_prod_suma'
*** Failed! Falsifiable (after 5 tests):
2
2

7 / 16

IM Tema 1: Introducción a la programación funcional

Programación funcional

Programación funcional y programación imperativa
La programación funcional es un estilo de programación cuyo
método básico de computación es la aplicación de funciones a
sus argumentos.

Un lenguaje de programación funcional es uno que soporta y

potencia el estilo funcional.

La programación imperativa es un estilo de programación en el

que los programas están formados por instrucciones que
especifican cómo se ha de calcular el resultado.

Ejemplo de problema para diferenciar los estilos de programación:

Sumar los n primeros números.

8 / 16

IM Tema 1: Introducción a la programación funcional

Programación funcional

Programación funcional y programación imperativa
La programación funcional es un estilo de programación cuyo
método básico de computación es la aplicación de funciones a
sus argumentos.

Un lenguaje de programación funcional es uno que soporta y

potencia el estilo funcional.

La programación imperativa es un estilo de programación en el

que los programas están formados por instrucciones que
especifican cómo se ha de calcular el resultado.

Ejemplo de problema para diferenciar los estilos de programación:

Sumar los n primeros números.

8 / 16

IM Tema 1: Introducción a la programación funcional

Programación funcional

Programación funcional y programación imperativa
La programación funcional es un estilo de programación cuyo
método básico de computación es la aplicación de funciones a
sus argumentos.

Un lenguaje de programación funcional es uno que soporta y

potencia el estilo funcional.

La programación imperativa es un estilo de programación en el

que los programas están formados por instrucciones que
especifican cómo se ha de calcular el resultado.

Ejemplo de problema para diferenciar los estilos de programación:

Sumar los n primeros números.

8 / 16

IM Tema 1: Introducción a la programación funcional

Programación funcional

Programación funcional y programación imperativa
La programación funcional es un estilo de programación cuyo
método básico de computación es la aplicación de funciones a
sus argumentos.

Un lenguaje de programación funcional es uno que soporta y

potencia el estilo funcional.

La programación imperativa es un estilo de programación en el

que los programas están formados por instrucciones que
especifican cómo se ha de calcular el resultado.

Ejemplo de problema para diferenciar los estilos de programación:

Sumar los n primeros números.

8 / 16

IM Tema 1: Introducción a la programación funcional

Programación funcional

Solución mediante programación imperativa

Programa suma n:

contador := 0
total := 0
repetir

contador := contador + 1
total := total + contador

hasta que contador = n

E
  • Links de descarga
http://lwp-l.com/pdf6118

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


No hay comentarios
 

Comentar...

Nombre
Correo (no se visualiza en la web)
Valoración
Comentarios
Es necesario revisar y aceptar las políticas de privacidad