Descarga la aplicación para disfrutar aún más
Vista previa del material en texto
Reporte del desarrollo de software aplicando el paradigma funcional DESARROLLO Ejercicio 1 1.3 Comprobación de un número impar Definir la función impar tal que impar x se verifica si el numero x es impar. Por ejemplo: Impar 7 True Impar 6 False Programa Impar1 :: Integer -> Bool Impar1 = odd Explicación y documentación Esta función recibe un entero y devuelve un boleano, para esto usa la función odd Como se puede observar esta función recibe una integral y devuelve un Bool, dependiendo de si el Integral es impar o par, devuelve un True o False, respectivamente, por ejemplo: Ejercicio 2 1.5 Suma de cuadrados. Definir la función suma_de_cuadrados tal que suma_de_cuadrados l es la suma de los cuadrados de los elementos de la lista l. Por ejemplo: suma_de_cuadrados [1,2,3] 14 Programa suma_de_cuadrados :: [Integer] -> Integer cuadrado :: Integer -> Integer cuadrado n = n*n suma_de_cuadrados l = sum (map cuadrado l) Explicación y documentación La función suma_de_cuadrados_1, es una función que recibe un array de enteros y regresa un entero, para ello usa las funciones sum, map y cuadrado. La función sum lo que es una función que recibe una lista de tipo num, y regresa un tipo num, esto sumando todos los elementos de la lista que recibe. map es una función que recibe dos argumentos, una función y una lista, respectivamente, lo que hace es aplicar la función a la lista que recibe y regresa esa misma lista con la función aplicada. < En este ejemplo se observa como la función retorna una lista a la que aplica la “función” de multiplicar por 3 Cuadrado es una función que recibe un entero y devuelve el entero elevado al cuadrado. Ejercicio 3 1.7 Valor de absoluto Redefinir la función abs tal que abs x es el valor absoluto de x. Por ejemplo: abs (-3) 3 abs 3 3 Programa n_abs_1 :: (Num a, Ord a) => a -> a n_abs_1 x = if x>0 then x else (-x) Explicación y documentación n_abs_1 es una función que recibe dos parámetros, un tipo Num, que abarca enteros, doubles, floats, etc. Y un tipo Ord, que es un tipo que abarca tipos de símbolos de comparación, como mayor que, menor que, etc, y devuelve boleanos dependiendo de si la comparación es cierta o falsa, por ejemplo: En sí, la función recibe un numero y con Ord lo compara con 0, si es mayor que 0 devuelve el mismo número, si es menor que 0, es decir, es negativo, multiplica el número por el signo – (menos), para así siempre devolver un numero positivo, lo que se podría ver como el valor absoluto del número. Ejercicio 4 1.11 Potencia Redefinir la función potencia tal que potencia x y es xy , por ejemplo: potencia 2 4 16 potencia 3.1 2 9.61 Programa potencia :: Num a => a -> Int -> a potencia x n = if n== 0 then 1 else x * potencia x (n-1) Explicación y documentación La función “potencia” es una función que recibe dos parámetros, un Num y un Int, y devuelve un Num. A través de condicionales verifica si la potencia (n) es igual a 0, ya que, como sabemos cualquier numero elevado a cero es 1, si este es el caso, regresa 1. En caso de que no sea 0, de forma recursiva calcula la potencia y la devuelve, ejemplificándolo de manera más clara, se podría ver de la siguiente manera funcion potencia (base, exponente) return base * potencia(base, exponente -1) Cabe mencionar que este progama tiene un problema muy evidente, y es que no tiene manera de verificar si la potencia que recibe es menor a 0, es decir es negativa, ya que como sabemos, esto nos devolvería una fracción, o un numero de tipo float. Ejercicio 5 1.12 Función identidad Redefinir la función id tal que id x es x. Por ejemplo: id 3 3 Programa n_id :: a -> a n_id x = x Explicación y documentación Esta función es muy sencilla y no requiere una amplia explicación, es una función que recibe un dato (a) y regresa ese mismo dato. Ejercicio 6 Ejercicio 2.2 Siguiente de un número Definir la función siguiente tal que siguiente x sea el siguiente del numero entero x. Por ejemplo, siguiente 3 4 Programa siguiente :: Integer -> Integer siguiente = (+1) Explicación y documentación Esta función, recibe un dato de tipo Integer y devuelve un tipo Integer. Esto sumándole 1 al integer recibido, mediante la notación prefija, esto, ya que la función tiene el primer elemento de la suma y como parámetro le estamos pasando el segundo argumento, un ejemplo de una suma en notación prefija: Esta suma da como resultado 7. Ejercicio 7 2.4 Mitad Definir la función mitad tal que mitad x es la mitad de x. Por ejemplo mitad 6 3.0 mitad 5 2.5 Programa mitad :: Doble -> Double mitad x = x/2 Explicación y documentación Esta función recibe un dato de tipo Double y devuelve un Double, resuelve el problema mediante la definición ecuacional (la mitad de un numero x es x/2). Para ello recibe un paramero x y lo divide entre dos, asignándole el valor calculado al parámetro y retornándolo. Ejercicio 8 2.6 Potencia de dos Definir la función dosElevadoA tal que dosElevadoA x es 2x. Por ejemplo: dosElevadoA 3 8 Programa dosElevadoA :: Int -> Int dosElevadoA = (2^) Explicación y documentación Esta es una función que recibe un entero y devuelve un entero, el entero que devuelve es el resultado de una operación matemática, el entero que recibe es el exponente, aplicándolo a una base 2 y devuelve el resultado de 2 elevado al exponente que recibió. Ejercicio 9 2.7 Reconocimiento de números positivos Definir la función esPositivo tal que esPositivo se verifica si x es positivo. Por ejemplo: esPositivo 3 True esPositivo (-3) False Programa esPositivo :: Int -> Bool esPositivo = (>0) Explicación y documentación Como podemos observar esta es una función que recibe un entero y regresa un booleano(true or false),el booleano es el resultado de una verificación, en este caso verifica que el entero siempre sea mayor a cero, en caso contrario este nos retornaría un falso. Ejercicio 10 2.10 Suma de los elementos de una lista Redefinir la función sum tal que sum l es la suma de los elementos de l. por ejemplo. n_sum [4,3,6] 13 Programa n_sum_1 :: Num a => [a] -> a n_sum_1 [] = 0 n_sum_1 (x:xs) = x + n_sum_1 xs Explicación y documentación En esta función tenemos que recibe el parámetro num. y los regresa en una lista, dicha lista regresaría la sumatoria de los números dentro de ella, si la lista esta vacía nos retornaría un cero, en caso de que la lista contenga un elemento, al momento de agregar más elementos, estos se irían sumando conforme se fueran agregando,siendo esto posible por (xs). Esto lo podemos observar en las siguientes definiciones. Donde en la primera función la lista contiene exactamente dos elementos y la segunda función contiene al menos dos elementos f1 [x1, x2] = "The list contains exactly two elements (n = 2)" f1 (x1:x2:xs) = "The list contains at least two elements (n >= 2)" sucesivamente se irían agregando datos a la lista (x1:x2:x3:xs) = "The list contains at least three elements (n >= 3)" En general, una vez que vemos :xs, ya estamos capturando cualquier lista, sea vacia o no. Ejercicio 11 2.3. Doble 2.3. Definir la función doble tal que doble x es el doble de x. Programa doble_1 :: Num a => a -> a doble_1 x = 2*x Explicación y documentación Este Ejercicio es sencillo ya que tenemos una función que tiene como parámetro un num y regresa un num, esta función resuelve el problema mediante una operación aritmética, multiplicando el numero introducido por dos, para asi dar con el doble del numero que se introdujo.
Compartir