Ir al contenido principal

N gramas

Un n-grama de una sucesión es una subsucesión de n elementos.

Definir la función

nGramas :: Int -> [a] -> [[a]]

tal que (nGramas k xs) es la lista de los n-gramas de xs de longitud k. Por ejemplo,

nGramas 0 "abcd"  ==  [""]
nGramas 1 "abcd"  ==  ["a","b","c","d"]
nGramas 2 "abcd"  ==  ["ab","ac","ad","bc","bd","cd"]
nGramas 3 "abcd"  ==  ["abc","abd","acd","bcd"]
nGramas 4 "abcd"  ==  ["abcd"]
nGramas 5 "abcd"  ==  []

Soluciones

nGramas :: Int -> [a] -> [[a]]
nGramas 0 xs     = [[]]
nGramas n []     = []
nGramas n (x:xs) = [x:ys | ys <- nGramas (n-1) xs] ++ nGramas n xs