Listas engarzadas
Una lista de listas es engarzada si el último elemento de cada lista coincide con el primero de la siguiente.
Definir la función
1 |
engarzada :: Eq a => [[a]] -> Bool |
tal que (engarzada xss) se verifica si xss es una lista engarzada. Por ejemplo,
1 2 3 4 |
engarzada [[1,2,3], [3,5], [5,9,0]] == True engarzada [[1,4,5], [5,0], [1,0]] == False engarzada [[1,4,5], [], [1,0]] == False engarzada [[2]] == True |
Soluciones
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 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 |
-- 1ª solución: engarzada :: Eq a => [[a]] -> Bool engarzada (xs:ys:xss) = not (null xs) && not (null ys) && last xs == head ys && engarzada (ys:xss) engarzada _ = True -- 2ª solución: engarzada2 :: Eq a => [[a]] -> Bool engarzada2 (xs:ys:xss) = and [ not (null xs) , not (null ys) , last xs == head ys , engarzada2 (ys:xss) ] engarzada2 _ = True -- 3ª solución: engarzada3 :: Eq a => [[a]] -> Bool engarzada3 xss = and [ not (null xs) && not (null ys) && last xs == head ys | (xs,ys) <- zip xss (tail xss)] -- 4ª solución: engarzada4 :: Eq a => [[a]] -> Bool engarzada4 xss = all engarzados (zip xss (tail xss)) where engarzados (xs,ys) = not (null xs) && not (null ys) && last xs == head ys -- 5ª solución: engarzada5 :: Eq a => [[a]] -> Bool engarzada5 xss = all engarzados (zip xss (tail xss)) where engarzados ([],_) = False engarzados (_,[]) = False engarzados (xs,y:_) = last xs == y -- 6ª solución: engarzada6 :: Eq a => [[a]] -> Bool engarzada6 xss = and (zipWith engarzados xss (tail xss)) where engarzados [] _ = False engarzados _ [] = False engarzados xs (y:_) = last xs == y |