-- EJERCICIO 1 data Figura = Circ Float | Rect Float Float deriving Show fig1 = Circ 2.5 fig2 = Rect 2 2 fig3 = Rect 5 2 -- Después de cargar Lab2.hs (previo :s +t) -- Main> fig1 -- Circulo 2.5 :: Figura -- Main> fig2 -- Rect 2.0 2.0 :: Figura -- Main> fig3 -- Rect 5.0 2.0 :: Figura area:: Figura -> Float area (Circ rad) = pi*(rad^2) area (Rect horz vert) = horz * vert -- Cargar de nuevo Lab2.hs -- Main> area fig1 -- 19.635 :: Float -- Main> area fig2 -- 4.0 :: Float -- Main> area fig3 -- 10.0 :: Float listfig = [fig1,fig2,fig3] -- Cargar de nuevo Lab2.hs -- Main> listfig -- [Circ 2.5,Rect 2.0 2.0,Rect 5.0 2.0] :: [Figura] -- EJERCICIO 2 data Direccion = Norte | Este | Sur| Oeste deriving (Enum, Eq, Show) -- Main> fromEnum Norte -- 0 -- Main> fromEnum Sur -- 2 -- Main> :t fromEnum -- fromEnum :: Enum a => a -> Int -- Main> fromEnum Este -- 1 -- Main> fromEnum Oeste -- 3 -- Main> toEnum 1 -- ERROR - Unresolved overloading -- *** Type : Enum a => a -- *** Expression : toEnum 1 toDir:: Int -> Direccion toDir = toEnum girodcha:: Direccion -> Direccion girodcha d = toDir (mod (fromEnum d +1) 4) giroizqda:: Direccion -> Direccion giroizqda d = toDir (mod (fromEnum d + 3) 4) -- Main> girodcha Norte -- Este -- Main> girodcha Este -- Sur -- Main> giroizqda Oeste -- Sur -- Main> giroizqda Oeste == girodcha Norte -- False -- Main> giroizqda Oeste == girodcha Este -- True f = girodcha . girodcha g = girodcha . giroizqda -- Main> f Norte -- Sur -- Main> f Este -- Oeste -- Main> g Norte -- Norte -- Main> :t f -- f :: Direccion -> Direccion -- Main> :t g -- g :: Direccion -> Direccion -- EJERCICIO 3 data TresBool = Cierto | Indefinido | Falso deriving (Eq,Ord,Show) infixl 4 &/& (&/&):: TresBool -> TresBool -> TresBool --conjunción trivalorada x &/& y = max x y infixl 3 |/| (|/|):: TresBool -> TresBool -> TresBool --disyunción trivalorada x |/| y = min x y -- EJERCICIO 4 data Arbin1 a = Hoja1 a | Nodo1 (Arbin1 a) (Arbin1 a) deriving Show a1 = Nodo1 (Hoja1 "en") (Nodo1 (Hoja1 "el")(Hoja1 "laboratorio")) data Arbin2 a = Vacio | Nodo2 (Arbin2 a) a (Arbin2 a) deriving Show a2 = Nodo2 (Nodo2 Vacio "en" Vacio) "Estoy" (Nodo2 Vacio "el" (Nodo2 Vacio "laboratorio" Vacio)) -- Main> a1 -- Nodo1 (Hoja1 "en") (Nodo1 (Hoja1 "el") (Hoja1 "laboratorio")) :: Arbin1 [Char] -- Main> a2 -- Nodo2 (Nodo2 Vacio "en" Vacio) "Estoy" (Nodo2 Vacio "el" (Nodo2 Vacio "laboratorio" Vacio)):: Arbin2 [Char] -- Main> -- EJERCICIO 5 fact:: Int -> Int fact 0 = 1 fact (n+1) = (n+1)* fact n factorial:: Integer -> Integer factorial 0 = 1 factorial (n+1) = (n+1)* factorial n -- Main> fact 10 -- 3628800 :: Int -- Main> factorial 10 -- 3628800 :: Integer -- Main> fact 20 -- -2102132736 :: Int -- se ha excedido el rango de Int -- Main> factorial 20 -- 2432902008176640000 :: Integer