Skip to content

Instantly share code, notes, and snippets.

@Titinx
Last active September 5, 2016 03:23
Show Gist options
  • Save Titinx/8da9d492d8d6957a83fab523b95c30bb to your computer and use it in GitHub Desktop.
Save Titinx/8da9d492d8d6957a83fab523b95c30bb to your computer and use it in GitHub Desktop.
Ejercicio 1 practica 1 - Programacion funcional UNLP
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