www.jammni.de

Logo - Kleiner Drache
Login
Username:

Passwort:

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

Logo - DracheHaskell-Forum

blizz

Gepostet:
17.05.2006 23:35

Bräuchte Hilfe bei Aufgaben  
Hallo,
ich bräuchte eure Hilfe bei folgenden Aufgaben:

a) Schreiben Sie eine Funktion countString :: String -> Int -> [(String,Integer)], die Strings in Blöcke der Länge
l zerlegt und analog zur Funktion count vom letzten Blatt, die Häugkeiten der so erzeugten Teilstrings zählt
Ein Beispiel:
> countStrings "Hallo Hallo!" 2
> [("o!",1),("ll",2),("Ha",2),("o ",1)]

b) Implementieren Sie eine Funktion stringStatistik :: String -> Int -> [(String,Double)], welche die Funktion
aus a) verwendet, um die relative Häugkeit der Teilstrings zu berechnen.

c) Schreiben Sie nun eine Ein/-Ausgabe Funktion analyzeText:: IO () die in der Konsole einen Dateinamen erfragt,
die Datei diesen Namens einliest und die zehn häugsten Teilstrings der Längen eins und zwei ausgibt.


Ich hoffe ihr könnt mir helfen, ich komm damit nicht zurecht!
Zum Seitenanfang    
 
Jacke

Gepostet:
18.05.2006 09:45

   
ich kümmer mich um12-14 uhr drum
Zum Seitenanfang    
 
Jacke

Gepostet:
18.05.2006 13:25

   

countstring str leng=co(zerlege str leng [] [])
where
co ((c,i):[])=((concat c),i):[]
co ((c,i):ws)=((concat c),i):(co ws)

zerlege [] leng [] liste= liste
zerlege [] leng teil liste=inlist [teil] liste
zerlege (s:str) leng teil liste
| ( (length(teil++[s]))==leng )= zerlege str leng [] (inlist [teil++[s]] liste)
| otherwise =zerlege str leng (teil++[s]) liste


inlist x []= ((x,1):[])
inlist x ((c,count):list)
|(x==c) = (c,(count+1)): list
| otherwise = (c,count): (inlist x list)




Zum Seitenanfang    
 
blizz

Gepostet:
18.05.2006 14:15

   
Perfekt! Ich danke dir, ich glaub ich stell hier öfter fragen :)

könntest du mir noch erklären wie das programm genau funktioniert??? oder die verwendeten befehle mal erklären?

Danke nochmal!!

blizz
Zum Seitenanfang    
 
Jacke

Gepostet:
18.05.2006 14:35

   
zweitens
funktioniert so in der art...häufigkeit in Prozent

stringStatistik str leng= rechne (countstring str leng)
where
rechne ((c,i):[]) = (c,(i*100 `div` length str) :[]
rechne ((c,i):list)= (c,(i*100 `div` length str) :(rechne (list))

Zum Seitenanfang    
 
Jacke

Gepostet:
18.05.2006 14:42

   
zerlege zerlegt die liste in gleich große stücke...in teil ist immer das aktuelle teilstück und in die variable liste tut man immer die teilstücke rein wenn sie gleich der variable leng sind

inlist ist eine hilfsfunktion die kuckt ob ein teilstück schon in der liste drin ist...wenn ja wird der counter des teilstücks erhöht...wenn nein wird das teilstück in die liste gehängt mit dem counter gleich eins

concat ist ne funktion von haskell die listen zusammen fügt...die hab ich nur benutzt weil ich für den vergleich in inlist eine liste von strings benötigt hatte...deswegen habe ich concat nochmal in countstring über alle strings laufen lassen...co ist die entsprechende hilfsfunktion um das durchzuführen

where ist ein schlüsselwort in haskell damit definiert man unterfunktionen
und die | funktionieren wie if abfragem

in der art : | (bedingung) = rirgendwas machen
|...
| (bedingung3)
|otherwise= irgendwas machen
Zum Seitenanfang    
 
blizz

Gepostet:
18.05.2006 15:01

   
das geht ja richtig flott hier! bin begeistert!
kann dir gar nicht genug danken!
ich glaub ich werd das forum weiterempfehlen!!
Zum Seitenanfang    
 
blizz

Gepostet:
18.05.2006 15:57

   
noch eine frage:

wenn ich stringStatistik mit in den Programmcode mit einfüge, bekomm ich eine Fehlermeldung:

parse error haskell (possibly incorrect indentation)


und zwar gefällt ihm die letzte zeile von dem stringStatistik nicht
an was liegt das? an meinem Programm? habt den GHCI!
Zum Seitenanfang    
 
Jacke

Gepostet:
18.05.2006 16:12

   

--stringStatistik :: String -> Int -> [(String,Double)]
stringStatistik str leng= rechne (countstring str leng)
where
rechne ((c,i):[]) = (c,(i `div` length str)) :[]
rechne ((c,i):list) = (c,(i `div` length str)) : rechne list



zwei klammern fehlten jetzt gehts

kannst gerne immer fragen...aber immer nen tag zeit ein planen ich studiere ja auch noch nebenbei :D
Zum Seitenanfang