Programa en Haskell Tipos de datos pasadas como funciones # 2
En esta lista de programas ahora abordaremos el lenguaje de programación llamado haskell el cual esta orientado a un paradigma de programación funcional donde la sintaxis y el código están más claros y es más intuitivo entenderlo.
Segundo programa funciones en haskell
1.- Calcular n al cuadrado
-- cuadrado n, calcula n ^ 2
- Para calcular más enteros usamos Integer
- Int está acotado por límites inferiores y superiores
- En el código siempre hay que definir el tipo de dato
- Haskell es un lenguaje fuertemente tipado
- Haskell es capaz de inferir el tipo de dato de una variable a partir de su definición
2.- Define la función mayor:
--mayor (n,m) devuelve el mayor de n o m
mayor:: (Ord a) =>(a, a) -> a
mayor (n,m) = if ( n > m ) then n else m
3.- La versión currificada de mayor
mayor_curry::Float ->(Float,Float)
mayor_curry n m =if ( n > m ) then n
else m
4.- La versión currificada versión 2
Utilizando la versión curry que dada una función que recibe una tupla
f:(a1,a2,a3,.......,an)->b
Devuelve la función currificada de f
f’:a1->(a->2….->(an->b)...)
5.- Evaluación de una expresión
cuadrado 3
(cuadrado n = n*n)
= 3
= 9
mayor(3,4)
if(3>4) then 3 else 4
=4
6.- Bloque infinito
infinito = infinito + 1
(infinito + 1) + 1
7.- Evaluando con constante y evaluación voráz
tres x = 3
tres infinito
Como la función tres no importa que reciba siempre será 3 por lo tanto lo evalúa como Evaluación perezosa.
tres infinito
/*tres .x */
= 3
Sólo se evalúan las expresiones si en verdad se ocupan
En el caso de cuadrado infinito
cuadrado infinito = 3
cuadrado infinito = infinito
Def: Una función es estricta sí f infinito = infinito
cuadrado infinito
infinito * infinito
Aquí es necesario evaluar a infinito para tener la multiplicación por lo tanto el resultato es infinito es decir, no termina la evaluación
8.- Composición de funciones
twice(f,x) Aplica dos veces f
twice::(Integer -> Integer-> Integer) -> Integer
twice (f, x) = f(f x)
twice(cuadrado 3)
cuadrado(3*3)
cuadrado 9
= 81
Con currificación
twice_curry::(Integer->Integer)->Integer->Integer
twice_curry f x = f (f x)
Ejercicio: Define la función cuarta a partir de twice y cuadrado.
¿Se puede definir utilizando la versión no currificada de twice?
cuarta n = twice(cuadrado n)
¿Cómo se define en la versión currificada?
cuarta = twice_curry cuadrado
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
/* | |
Autor: Ernesto Maya | |
Lenguajes de Programación | |
20/08/2018 | |
*/ | |
--Colocando clases de tipo de datos | |
--cuadrado n, calcula n^2 | |
--Cuadrado es una variable de tipo función, que recibe un flotante y devuelve un flotante | |
--cuadrado::float -> float | |
cuadrado:: Integer -> Integer | |
cuadrado n = n * n | |
--mayor (n,m) devuelve el mayor de n o m | |
--mayor:: (Ord a) =>(a, a) -> a | |
mayor::(Float,Float)->Float | |
mayor (n,m) = if (n>m) then n else m | |
--La versión currificada de mayor | |
mayor_curry::Float ->(Float->Float) | |
mayor_curry n m =if ( n > m ) then n | |
else m | |
--Versión 2 currificación | |
--mayor_curry2 = curry mayor | |
infinito = infinito + 1 | |
tres::Integer->Integer | |
tres x = 3 | |
--Función Twice | |
twice::(Integer -> Integer-> Integer) -> Integer | |
twice (f, x) = f(f x) | |
--Función Twice currificada | |
twice_curry::(Integer->Integer)->Integer->Integer | |
cuarta n = twice(cuadrado n) | |
cuarta = twice_curry cuadrado | |
twice_curry f x = f (f x) | |
RETO DEL BLOG, PROPÓN UN PROGRAMA MEJORADO Y CON SUS RESPECTIVAS EXCEPCIONES QUE PODRÍA TENER
Te sirven mis contenidos y quieres ayudarme a crecer invitame un chicle
Quieres ganar dinero acortando enlaces entonces registrate en Adfly
Comentarios
Publicar un comentario