• Wir präsentieren Dir heute ein Stellenangebot für einen Frontend-Entwickler Angular / Java in Braunschweig. Hier geht es zur Jobanzeige

Haskell words selbst implementieren

Z

Zukami

Mitglied
Hallo zusammen,

Ich habe die Aufgabe die bereits in der Prelude von Haskell vordefinierte Funktion words selbst zu implementieren.
Ich darf aber nicht einfach die Implementation von words abschreiben und darf auch nur Funktionen verwenden, die wir bereits in der Vorlesung besprochen haben. (Dies sind vorwiegend Funktionen, die man auf Listen anwenden kann)

Zum Beispiel:
words' "Hallo \n wie geht \t es ihnen."
["Hallo", "wie", "geht", "es", "ihnen"]

Ich habe schon verschiedene Ansätze ausprobiert, komme aber seit Stunden nicht mehr weiter.
Folgendes habe ich mir schon einmal überlegt:

Code:
words' :: String -> [String]
words' [] = []
words' (x:xs)
             | x == ' ' ||  x == '\n' || x == '\t'= words' xs
             | otherwise = x : words' xs


dabei bekomme ich immer die Fehlermeldung, dass words' xs in der letzen Zeile von dem Typ [String] und nicht [Char] sei. Was ja auch sinn ergibt, da ich davor x : habe. würde ich dies aber wegnehmen, dann ist der output nur noch ["x"] und wenn ich [x] : words' xs mache, dann habe ich einfach jeden einzelnen Buchstaben ind er ausgabe: ["h","a","l","l","o"]

Könnte mir da echt jemand weiterhelfen, wie ich dies fixxen könnte?


Code:
 myWords :: String -> [String]
myWords "" = []
myWords text = takeWhile (/= ' ') text : []

Als alternative habe ich mir auch schon überlegt mit takewhile oder einfach while zu arbeiten, bin aber nicht weit gekommen...
 
Z

Zukami

Mitglied
Für alle Nachfolger, die dieses Problem auch haben, ich habe schlussendlich folgende Lösung gefunden.
Java:
word :: String -> [String]
word  []  = []
word  xxs@(x:xs)
  | x == ' '  = word  xs
  | x == '\t' = word  xs
  | x == '\n' = word  xs
  | otherwise = ys : word  rest
                  where (ys, rest) = break (\x -> x == ' '|| x == '\n' || x == '\t') xxs
 

Ähnliche Java Themen

Anzeige

Neue Themen


Oben