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
RETO REALIZAR LA FUNCIÓN CHICHARRONERA
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