Elemento común en la menor posición
Enunciado
1 2 3 4 5 6 7 8 9 10 11 12 13 |
-- Definir la función -- elemento :: Eq a => [a] -> [a] -> [a] -- tal que (elemento xs ys) es la lista formada por el elemento común a -- xs e ys con la menor posición. Por ejemplo. -- elemento [3,7,6,9,8,0] [5,4,2,7,8,6,9] == [7] -- elemento [3,7,6,9] [9,5,6] == [9] -- elemento [5,3,6] [7,6,3] == [3] -- elemento [3,7,6,3,8,0] [5,4,9,1,4,2,1] == [] -- elemento [2,3,5] [7,4] == [] -- -- Nota: Como se observa en el 3ª ejemplo, en el caso de que un elemento -- x de xs pertenezca a ys y el elemento de ys en la misma posición que -- x pertenezca a xs, se elige como el de menor posición el de xs. |
Soluciones
[schedule expon=’2014-12-01′ expat=»06:00″]
- Las soluciones se pueden escribir en los comentarios hasta el 1 de diciembre.
- El código se debe escribir entre una línea con <pre lang=»haskell»> y otra con </pre>
[/schedule]
[schedule on=’2014-12-01′ at=»06:00″]
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 |
import Test.QuickCheck -- 1ª definición: elemento1 :: Eq a => [a] -> [a] -> [a] elemento1 p@(x:xs) q@(y:ys) | x `elem` q = [x] | y `elem` xs = [y] | otherwise = elemento1 xs ys elemento1 _ _ = [] -- 2ª definición: elemento2 :: Eq a => [a] -> [a] -> [a] elemento2 [] _ = [] elemento2 (x:xs) ys | x `elem` ys = [x] | otherwise = elemento2 ys xs -- Propiedad de equivalencia de las definiciones prop_elemento :: [Int] -> [Int] -> Bool prop_elemento xs ys = elemento1 xs ys == elemento2 xs ys -- La comprobación es -- ghci> quickCheck prop_elemento -- +++ OK, passed 100 tests. ... |
[/schedule]
Un comentario