Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

What to call a function that splits lists?

I want to write a function that splits lists into sublists according to what items satisfy a given property p. My question is what to call the function. I'll give examples in Haskell, but the same problem would come up in F# or ML.

split :: (a -> Bool) -> [a] -> [[a]]  --- split lists into list of sublists

The sublists, concatenated, are the original list:

concat (split p xss) == xs

Every sublist satisfies the initial_p_only p property, which is to say (A) the sublist begins with an element satisfying p—and is therefore not empty, and (B) no other elements satisfy p:

initial_p_only :: (a -> Bool) -> [a] -> Bool
initial_p_only p [] = False
initial_p_only p (x:xs) = p x && all (not . p) xs

So to be precise about it,

all (initial_p_only p) (split p xss)

If the very first element in the original list does not satisfy p, split fails.

This function needs to be called something other than split. What should I call it??

like image 414
Norman Ramsey Avatar asked Mar 25 '11 21:03

Norman Ramsey


1 Answers

I believe the function you're describing is breakBefore from the list-grouping package.

Data.List.Grouping: http://hackage.haskell.org/packages/archive/list-grouping/0.1.1/doc/html/Data-List-Grouping.html

ghci> breakBefore even [3,1,4,1,5,9,2,6,5,3,5,8,9,7,9,3,2,3,8,4,6,2,6]
[[3,1],[4,1,5,9],[2],[6,5,3,5],[8,9,7,9,3],[2,3],[8],[4],[6],[2],[6]]
like image 66
adamse Avatar answered Sep 27 '22 20:09

adamse