Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- -- | all decompositions of a string into multi-part (nonempty) pieces
- -- >>> parts "abc"
- -- [["abc"],["a","bc"], ["ab","c"], ["a","b","c"]]
- -- must not use drop, take, splitAt. must make use of list monad (listcomp/do notation)
- parts :: [a] -> [[[a]]]
- parts = undefined
- -- my attempt
- parts' :: [a] -> [[[a]]]
- parts' [] = [[[]]]
- parts' [e] = [[[e]]]
- parts' l@(x:xs) = addElem (parts' xs) x ++ addToLastElem (parts' xs) x
- -- appends a char as a single-element string to every list of strings in a list of list of strings.
- -- addElem [["a","b"],["ab"]] 'c'
- -- >>> [["c","a","b"],["c", "ab"]]
- addElem :: [[[a]]] -> a -> [[[a]]]
- addElem [] e = [[[e]]]
- addElem l@(x:xs) e = [[e] : listOfStrings| listOfStrings <- l]
- -- adds a char to every last string in a list of strings, in a list of list of strings.
- -- addToLastElem [["a","b"],["ab"]] 'c'
- -- >>> [["a","cb"],["cab"]]
- addToLastElem :: [[[a]]] -> a -> [[[a]]]
- addToLastElem [] e = [[[e]]]
- addToLastElem l@(x:xs) e = [init listOfStrings ++ [e : (last listOfStrings)] | listOfStrings <- l]
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement