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

Entradas más populares de este blog

Programas en C #3 Tres números, el mayor, el menor y el del medio

Programas en C #1 Millas a Kilometros

Programas en C #6 Estructuras en C Parte 2