
From: Jo?o Paulo Pizani Flor
OK, so my specific problem goes like this: I have a list of tuples :t myList [ (Float, Integer) ] And I want to "group" this list into a nested list groupAtoms :: [ (Float,Integer) ] -> [ [(Float,Integer)] ]
Of course, I want that the concatenation of the groups yield me the original list, i.e, (foldl (++) [] . groupAtoms == id), and the criterion that defines a group is that: "The sum of the first elements in the tuples comprising the list must be greater than or equal to 1.0".
Jo?o, I am a beginner also and I liked Daniel Fischer's solution. Here is another (less elegant) solution: -- Start Code Here -- foldfun takes an existing list of lists of pairs and decides -- whether to append p to the current list, pl, or start a new -- list of pairs. foldfun done p (pl:pls) = if done pl then [p]:pl:pls else (p:pl):pls foldfun done p [] = [[p]] -- mygroup2 folds list of pairs, pl, using the foldfun, and then -- puts all the lists in the correct order using reverse twice. mygroup2 pl = map reverse $ reverse $ foldr (foldfun done) [] (reverse pl) where done pl = sum (map fst pl) >= 1.0 -- End of Code Cheers, Hein
participants (1)
-
Hein Hundal