[ create a new paste ] login | about

Link: http://codepad.org/cx1B963m    [ raw code | output | fork ]

RRUIZ5 - Haskell, pasted on Oct 4:
--Suma 2 numeros--
suma :: Integer -> Integer -> Integer
suma a b = a + b

--Eleva al cuadrado un número--
cuadrado :: Integer -> Integer
cuadrado a = a * a

--Regresa el último elemento de la lista--
ultimo :: [a] -> a
ultimo [x] = x
ultimo (_:xs) = ultimo xs

--Regresa el penúltimo elemento de la lista--
penultimo :: [a] -> a
penultimo [x,_]  = x
penultimo (_:xs) = penultimo xs

--Regresa el i-ésimo elemento de la lista--
elementoEn :: [a] -> Integer -> a
elementoEn lista cual = elementoEnAux lista cual 1

--Auxiliar para ir contando en que posición vamos--
elementoEnAux :: [a] -> Integer -> Integer -> a
elementoEnAux (x:xs) cual i = if (cual == i) then x else elementoEnAux xs cual (i+1)

--Nos dice si el número es par o no
esPar :: Integer -> Bool
esPar i = if (mod i 2) == 0 then True else False

--Lista infinita de números pares
pares :: [Integer]
pares = [x | x <- [2..], esPar x]

--Construye una lista según--
--[f(0),f(1),f(2),...,f(n-1)]
construyeLista :: (Integer -> Integer) -> Integer -> [Integer]
construyeLista fun entero = construyeListaAux fun entero 0

--Auxiliar para ir contando en que posición vamos--
construyeListaAux :: (Integer -> Integer) -> Integer -> Integer -> [Integer]
construyeListaAux fun entero i = if (entero == i) then [] else [fun i] ++ construyeListaAux fun entero (i+1)

data Letra = A | B | C | D | E | F | G | H | I | J | K | L | M | N | O | P | Q | R | S | T | U | V | W | X | Y | Z  deriving (Show,Eq)
data Formula 	= Atom Letra
		| Not Formula
		| Formula :&: Formula
		| Formula :|: Formula
		| Formula :->: Formula
		| Formula :<->: Formula deriving  (Show,Eq)

data Booleano	= Cierto | Falso deriving (Show,Eq)

-- Obtiene todas las formulas Atómicas ocupadas en la formula --
-- Ejemplo: atoms ((Atom A:&:Atom B) :->: (Atom C:|:Atom D)) --
atoms :: Formula -> [Letra]
atoms (Atom l) = [l]
atoms (Not f)  = atoms f
atoms (f1 :&: f2) = (atoms f1) ++ (atoms f2)
atoms (f1 :|: f2) = (atoms f1) ++ (atoms f2)
atoms (f1 :->: f2) = (atoms f1) ++ (atoms f2)
atoms(f1 :<->: f2) = (atoms f1) ++ (atoms f2)


--Simplifica doble negación, implicación y doble implicación
-- Ejemplo: simplifica (Atom P :<->: Atom Q)
simplifica :: Formula -> Formula
simplifica (Atom l) = Atom l
simplifica (Not (Not f))  = simplifica f
simplifica (Not f)  = Not (simplifica f)
simplifica (f1 :&: f2) = (simplifica f1) :&: (simplifica f2)
simplifica (f1 :|: f2) = (simplifica f1) :|: (simplifica f2)
simplifica (p :->: q) = (Not(simplifica ( p)) :|: (simplifica q))
simplifica (p :<->: q) = simplifica (((simplifica p):->:(simplifica q))
			:&:
			((simplifica q):->:(simplifica p)))

main = print (cuadrado 3)


Output:
1
9


Create a new paste based on this one


Comments: