Advertisement
Guest User

Untitled

a guest
Mar 17th, 2022
77
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.04 KB | None | 0 0
  1. -- | all decompositions of a string into multi-part (nonempty) pieces
  2. -- >>> parts "abc"
  3. -- [["abc"],["a","bc"], ["ab","c"], ["a","b","c"]]
  4. -- must not use drop, take, splitAt. must make use of list monad (listcomp/do notation)
  5. parts :: [a] -> [[[a]]]
  6. parts = undefined
  7.  
  8. -- my attempt
  9. parts' :: [a] -> [[[a]]]
  10. parts' [] = [[[]]]
  11. parts' [e] = [[[e]]]
  12. parts' l@(x:xs) = addElem (parts' xs) x ++ addToLastElem (parts' xs) x
  13.  
  14. -- appends a char as a single-element string to every list of strings in a list of list of strings.
  15. -- addElem [["a","b"],["ab"]] 'c'
  16. -- >>> [["c","a","b"],["c", "ab"]]
  17. addElem :: [[[a]]] -> a -> [[[a]]]
  18. addElem [] e = [[[e]]]
  19. addElem l@(x:xs) e = [[e] : listOfStrings| listOfStrings <- l]
  20.  
  21. -- adds a char to every last string in a list of strings, in a list of list of strings.
  22. -- addToLastElem [["a","b"],["ab"]] 'c'
  23. -- >>> [["a","cb"],["cab"]]
  24. addToLastElem :: [[[a]]] -> a -> [[[a]]]
  25. addToLastElem [] e = [[[e]]]
  26. addToLastElem l@(x:xs) e = [init listOfStrings ++ [e : (last listOfStrings)] | listOfStrings <- l]
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement