--1.- plural :: [String] -> [String] plural xs = map (ponerEse) xs ponerEse:: String -> String ponerEse pal | elem (last pal) "aeiou" = pal ++ "s" | otherwise = pal -- Main> plural ["casa", "árbol", "barco", "tren"] -- ["casas","\225rbol","barcos","tren"] --2.- -- f :: a -> (b,a) -- g :: b -> a -> c -- h = (uncurry g).f -- -- h x = ((uncurry g).f) x -- h x = (uncurry g) (f x) => x :: a => (f x):: (b,a) -- h x = (uncurry g) (f x) :: c -- -- h :: a -> c --3.- paresAdy [] = [] paresAdy [x] = [] paresAdy xs = zip xs (tail xs) -- Otra solución paresAdy' xs | length xs < 1 = [] | otherwise = zip xs (tail xs) --4.- --f = reverse . dropWhile (== 0) . reverse f xs | last xs == 0 = (f.init) xs | otherwise = xs --5.- data DigBin = Cero | Uno deriving (Eq, Show) sumDig :: DigBin -> DigBin -> (DigBin,DigBin) sumDig Cero Cero = (Cero,Cero) sumDig Uno Uno = (Cero,Uno) sumDig _ _ = (Uno,Cero) -- data DigBin = Cero | Uno deriving (Enum, Eq, Show) -- Usando que fromEnum Cero = 0 y fromEnum Uno = 1 -- sumDig :: DigBin -> DigBin -> (DigBin,DigBin) -- sumDig x y = (toEnum ((fromEnum x + fromEnum y) `div` 2), toEnum ((fromEnum x + fromEnum y) `mod` 2)) type NumBin = [DigBin] sumNum :: NumBin -> NumBin -> NumBin sumNum n1 n2 | dif == 0 = reverse (sumNumR Cero (reverse n1) (reverse n2)) | dif < 0 = reverse (sumNumR Cero (compCeros (negate dif) (reverse n1)) (reverse n2)) | otherwise = reverse (sumNumR Cero (reverse n1) (compCeros dif (reverse n2))) where dif = length n1 - length n2 compCeros m xs = xs ++ [Cero | i<-[1..m]] sumNumR :: DigBin -> NumBin -> NumBin -> NumBin sumNumR r [] [] = [r] sumNumR r (x:xs) (y:ys) = d2 :(sumNumR r3 xs ys) where (d1,r1) = sumDig x y (d2,r2) = sumDig d1 r (r3,r4) = sumDig r1 r2 -} -- Main> sumNum [Uno,Uno,Cero,Uno] [Uno,Cero,Uno,Uno,Uno] -- [Uno,Cero,Cero,Uno,Cero,Cero] -- Main> sumNum [Uno,Cero,Uno,Uno,Uno] [Uno,Uno,Cero,Uno] -- [Uno,Cero,Cero,Uno,Cero,Cero] -- Main> sumNum [Uno,Cero,Uno,Uno,Uno] [Cero,Uno,Uno,Cero,Uno] -- [Uno,Cero,Cero,Uno,Cero,Cero] --6.- -- a) con listas intensionales listaEjer2 = [(x,x+2) | x <-[1,5..]] -- b) sin ellas listaEjer2' = ps where ps = (1,3): map (\(x,y)->(x+4,y+4)) ps -- Main> take 10 listaEjer2 -- [(1,3),(5,7),(9,11),(13,15),(17,19),(21,23),(25,27),(29,31),(33,35),(37,39)] -- Main> take 10 listaEjer2' -- [(1,3),(5,7),(9,11),(13,15),(17,19),(21,23),(25,27),(29,31),(33,35),(37,39)]