Das Problem wird zunächst in mehrere voneinander unabhängige Teilschritte zerlegt. Die Komposition dieser Funktionen ergibt dann die Zielfunktion. Die einzelnen Funktionen sind weitgehend unabhängig voneinander und können gut in Gruppenarbeit erledigt werden.
| Einzelschritt | Name der Funktion | Signatur |
| Alle Satzzeichen in Leerzeichen umwandeln | satzzeichenEntfernen | Text -> Text |
| Text in Zeilen aufspalten | zeilenweise | Text -> [Zeile] |
| Zeilen nummerieren | nummerieren | [Zeile] -> [(Zeile,Int)] |
| jede Zeilen in Worte teilen | toWort | [(Zeile,Int)] -> [(Wort,Int)] |
| kurze Wörter entfernen | entfernen | [(Wort,Int)] -> [(Wort,Int)] |
| Liste aufsteigend sortieren | sortieren | [(Wort,Int)] -> [(Wort,Int)] |
| gleiche Worte zusammenfassen | zusammenfassen | [(Wort,Int)] -> [(Wort,[Int])] |