www.jammni.de

Logo - Kleiner Drache
Login
Username:

Passwort:

Daten merken
Auto-Login
Registrieren
 
Online
niemand
 
Forumsuche
Suche nach:

Logo - DracheHaskell-Forum

Tal

Gepostet:
08.09.2006 11:29

String in Wörter unterteilen  
Hi!

Ich habe im Nachhinein rausgefunden, dass es im Prelude eine Funktion "words" gibt, die genau das gleiche tut, aber nur mal aus Interesse - wie würde ein etwas fortgeschrittenerer Haskell-Programmierer diese Funktion schreiben? (Ich habe gerade erst angefangen.)


-- Gibt erstes Wort und Rest des String zurück.
word :: String -> String -> (String, String)
word "" a = ("", a)
word (' ':xs) a = word xs ""
word (x:' ':xs) a = ([x], xs)
word (x:xs) a = (x : fst w, snd w) where w = word xs ""

-- Erstellt Liste von Wörtern aus String mithilfe von "word".
wordsa :: String -> [String]
wordsa "" = []
wordsa s =
if fst w == ""
then []
else fst w : wordsa (snd w)
where w = word s ""

Zum Seitenanfang    
 
Jammni

Gepostet:
11.09.2006 09:19

   
Jacke hat leider momentan kein Internet. Aber ich versuch mal sie zu erreichen, damit sie deine Frage beantworten kann. Vielleicht schaut ja auch Siracusa mal vorbei ;-)
Zum Seitenanfang Homepage   ICQ    
 
Siracusa

Gepostet:
11.09.2006 18:33

   
Hi,

mach ich doch glatt.

Also ich find deine Lösung schon ganz gut, hätt ich wahrscheinlich so oder so ähnlich auch gemacht. Was mir noch aufgefallen ist: Bei deiner word-Funktion ist der zweite Parameter doch eigentlich überflüssig, denn das einzige Mal, wo er tatsächlich in das Ergebnis einfließt ist am Anfang und da ist er immer ein Leerstring.

Viele Grüße,

Siracusa
Zum Seitenanfang    
 
Razor

Gepostet:
08.10.2011 09:15

   
Bau doch einfach takewhile und dropwhile in das programm ein

z.B in ghci würde es so aussehen

ghci> dropWhile (/=\\\' \\\') \\\"This is a sentence\\\"
\\\" is a sentence\\\"

ghci> takeWhile (/=\\\' \\\') \\\"This is a sentence\\\"
\\\"This \\\"

Tut mir leid , irgendwie bekomm ich keine lerzeichen rein.
Über all wo / ( auser /=) steht kommt ein lerzeichen hin
Zum Seitenanfang    
 
Landei

Gepostet:
08.10.2011 18:16

   
Wie wäre


import Data.List

words = filter ((/= \' \').head) . groupBy (\\x y-> (x == \' \') == (y == \' \'))
Zum Seitenanfang    
 
Razor

Gepostet:
09.10.2011 09:29

   
Nein, das ist nur hier so, ich schreib normal lerzeichen wenn ichs dann hier poste kommen /

-- aber nette idee
Zum Seitenanfang