100 likes | 312 Views
Subrutinas. Subrutinas. Haskell en las funciones utiliza parámetros y estos son pasados por valor. Por ejemplo: c uadrado :: Integer -> Integer cuadrado x = x*x
E N D
Subrutinas • Haskell en las funciones utiliza parámetros y estos son pasados por valor. Por ejemplo: • cuadrado :: Integer->Integer • cuadrado x = x*x • También existen las Funciones de Orden Superior, estas permiten que las funciones sean tratadas como parametros que son pasados como argumentos de funciones y que sean devueltas como resultados. • La idea de Funciones de Orden Superior es equivalente a subrutinas.
Funciones de OrdenSuperior Funciones que reciben como argumento una función o que devuelven una función como resultado
Función como argumento: • dosveces:: (Integer->Integer) ->Integer->Integer • dosveces f x = f (f x ) • inc::Integer->Integer • inc x = x + 1 • dec::Integer->Integer • dec x = x - 1
Ejemplo: • En este ejemplo, la función sumara dos veces la cantidad de 1 al parámetro ingresado, en la parte “dosveces :: (Integer -> Integer)” se especifica que la el primer parámetro es una función que tiene un ingreso como Integer y como salida otro Integer, luego el Integer siguiente que esta fuera del paréntesis es el segundo parámetro que se ingresa y este no es función, y por último el ultimo Integer es el dato de salida. • En la parte “dosveces f x = f (f x)” se ejecuta la siguiente acción: f es la función que se quiere ejecutar y x es el parámetro para tratar, en la parte • f (f x) primero se ejecuta el paréntesis, entonces ingresas la función f y el parámetro x, en este ejemplo se ejemplifican dos funciones “inc” y “dec” la cual una suma 1 y la otra resta 1 respectivamente, como funciona: se puede ingresar de la siguiente forma “dosvecesinc 5” aquí se pasan los parámetros a las funciones correspondientes, en este caso, ejecutará la función dosveces e ingresará la función inc con el parámetro 5, realizara los procesos correspondientes y el resultado será 7, el cual es un tipo de retorno Integer.
Función como resultado: • f2 ::Int-> (Int->Int) • f2 x y = y + x • En este ejemplo, el tipo de paso de parámetros son: los datos ingresados a “x” e “y” y estos son usados en la función y + x, entonces el tipo de retorno de la función f2 es la función x y que es de tipo (Int -> Int) • Se llama la función f2 y se le dan los dos parámetros, por ejemplo: • Ingresamos “f2 5 3” y resulta 8.
Función como argumento y como resultado: • f3 :: (Int->Int) -> (Int->Int) • f3 g y = 2 * g (y+1) • uno ::Int->Int • uno a = a + 30 • En este ejemplo, el tipo de paso de parámetros son: los datos ingresados a “g” e “y”, en el cual g es una función del tipo (Int -> Int) y estos son usados en la función f3, entonces el tipo de retorno de la función f3 es la función “uno” que es de tipo (Int -> Int). • Se llama a la función f3, primero se le ingresan una función y luego un parámetro, por ejemplo: “f3 uno 1” luego llama a la función uno dentro de la función f3 y le da el parámetro de 1” luego el resultado es 64. • En haskell los programas, reciben valores de distinto tipo según sea la función, y cada función trabaja con esos valores, entregando el resultado ya procesado.
Manejo de Excepciones • Manejo de Excepciones • El sistema de incluye un mecanismo simple de control de excepciones. Cualquier operación de Entrada/Salida podría lanzar una excepción en lugar de devolver un resultado. Las excepciones se representan como valores de tipo IOError. • El tipo IOError representa todas las posibles excepciones que pueden ocurrir al ejecutar operaciones.
Ejemplo: • dividir ::Float->Float->Float • dividir x 0 = error "Division por cero" • dividir x y = x / y • En el siguiente programa, al ingresar dos valores, por ejemplo “3” y “0” lanzará por pantalla un error, “división por cero”, que es usada gracias a la función “error”.