Last active
September 5, 2016 03:23
-
-
Save Titinx/8da9d492d8d6957a83fab523b95c30bb to your computer and use it in GitHub Desktop.
Ejercicio 1 practica 1 - Programacion funcional UNLP
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
seven x = 7 -- GG IZI | |
-- if then else | |
sing 0 = 0 | |
sing x = if x > 0 then 1 else -1 | |
-- sin guardas (sin abs) | |
sing 0 = 0 | |
sing x = x / sqrt(x^2) | |
-- sin guardas | |
sing 0 = 0 | |
sing x = x / abs x -- usar otra por el ejercicio de 'absolute' | |
-- con guardas | |
sing x | |
| x = 0 = 0 | |
| x > 0 = 1 | |
| x < 0 = -1 | |
-- sin guardas | |
absolute x | |
| x >= 0 = x | |
| x < 0 = -x | |
-- con guardas | |
absolute x = if x >= 0 then x else -x | |
-- usando sing | |
abolsute x = x * sing x | |
-- sin llamado | |
aboslute x = sqrt(x^2) | |
--and' | |
and' x y = if x then y else False | |
-- con guardas | |
and' x y | |
| x = y | |
| otherwise = False | |
or' x y = if x the True else y | |
-- con guardas | |
or' x y | |
| x = True | |
| otherwise = y | |
not' x = if x then False else True | |
--con guardas | |
not' x | |
| x = False | |
| otherwise = true | |
xor' x y = if x == y then True else False | |
-- con guardas | |
xor' x y | |
| x == y = True | |
| x /= y = False | |
-- dividesTo = toma dos numeros y dice si el primero divide al segundo | |
dividesTo x y = if mod y x == 0 then True esle False | |
-- con guardas | |
dividesTo x y | |
| mod y x == 0 = True | |
| otherwise = False | |
-- isMultiplo toma dos numeros y dice si el primero es multiplo del segundo. | |
isMultiplo x y = dividesTo y x | |
isCommonDivisor x (w,q) | |
| dividesTo x w = dividesTo x q | |
| otherwise = False | |
isCommonMult x (w,q) | |
| isMultiplo x w = isMultiplo x q | |
| otherwise = False | |
isCommonDivisor a b c = a `divides` b && a `divides` c | |
isCommonMult a (b,c) = a `isMultipleOf` b && a `isMultipleOf` c | |
swap (x,y) = (y,x) | |
-------------------------------------------------- | |
-- Ejercicio 2 | |
-- a) f x = let (y,z) = (x,x) in y | |
f x = x | |
-- b) greaterThan (x,y) = if x > y then True else False | |
greaterThan (x,y) = x > y | |
-- c) f (x,y) = let z = x + y in g (z,y) where g (a,b) = a - b | |
f (x,y) = x | |
---------------------------------------------------- | |
-- 3. Redefinir la función power4 de dos formas diferentes | |
-- power4 x = let sqr y = y * y | |
-- in sqr (sqr x) | |
power4 x = x^4 | |
power4 x = x^2^2 | |
power4 x = f where f = x*x*x*x | |
power4 x = let w q = q^2 in w (w x) | |
----------------------------------------------------------------------------------------------- | |
-- 4. Definir la función fib que calcula el n-ésimo término de la sucesión de Fibonacci, definida | |
-- esta última por: | |
-- T (0) = T (1) = 1 | |
-- T (n) = T (n − 1) + T (n − 2) | |
t 0 = t 1 | |
t 1 = 1 | |
t n = t (n-1) + t (n-2) | |
---------------------------------------------- | |
-- Ejercicios complementarios | |
-- 9. Un año es bisiesto si sus últimas dos cifras son divisibles por 4 y distintas a 00; en caso | |
-- contrario sólo es bisiesto si es divisible por 400. Ejemplos: | |
-- 1996 fue bisiesto porque 96 es divisible por 4 y es distinto a 00 | |
-- 2003 no fue bisiesto porque 03 no es divisible por 4 | |
-- 1900 no fue bisiesto porque termina en 00 y no es divisible por 400 | |
-- 2000 fue bisiesto porque termina en 00 y es divisible por 400 | |
-- Definir una función que determine si un año es bisiesto o no. | |
bi x | |
| (mod y 4 == 0) && (y /= 0) = True | |
| otherwise = (mod x 400 == 0) | |
where y = mod x 100 | |
-- reutilizando codigo | |
bi' x | |
| dividesTo x y && y /= 0 = True | |
| otherwise = dividesTo 400 x | |
where y = mod x 100 | |
-- | |
bi'' x = (y /= 0 && 4 `dividesTo` y) || 400 `dividesTo` x | |
where y = x `mod` 100 | |
-- 10. Definir la función sort3, que recibe tres números y los retorna ordenados (el primero | |
-- menor o igual que los demás; el segundo menor o igual que el tercero). Implemente al | |
-- menos tres soluciones distintas. | |
sort3 x y z | |
| x > y && x > z = x (max y z) (min y z) | |
| y > z = y (max x z) (min x z) | |
| otherwise = z (max x y) (min x y) | |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment