Ir al contenido principal

Particiones por un elemento

Definir la función

particiones :: Eq a => [a] -> a -> [([a],[a])]

tal que (particiones xs y) es lalista delas particiones de xs en dos partes tales que el primer elemento de la segunda parte es y. Por ejemplo,

particiones [2,9,1,3,9,4] 9   == [([2],[9,1,3,9,4]),([2,9,1,3],[9,4])]
particiones [2,9,1,3,9,4] 3   == [([2,9,1],[3,9,4])]
particiones [2,9,1,3,9,4] 7   == []
particiones "Particiones" 'i' == [("Part","iciones"),("Partic","iones")]

Soluciones

particiones :: Eq a => [a] -> a -> [([a],[a])]
particiones [] _ = []
particiones xs y
  | null vs = []
  | otherwise = (us,vs) : [(us ++ y:us', vs')
                          | (us',vs') <- particiones (tail vs) y ]
  where (us,vs) = span (/=y) xs