www.jammni.de

Logo - Kleiner Drache
Login
Username:

Passwort:

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

Logo - DracheHaskell-Forum

daMSTRin

Gepostet:
03.12.2006 11:46

ListComprehension  
Hallo, und erstmal danke das ihr euch zeit nimmt das hier zu lesen ^^...ich habe einige Probleme mit der List comprehension...eigentlich ist sie ja ganz schön und für einen Mathematiker gibt es sicherlich nichts schöneres mit Listen ^^, aber irgendwie fehlt mir wohl die erfahrung die Mengen die ich normal definieren könnte in Haskell zu definieren.
z.B. hab ich folgende funktion

muh :: [Int]-> [(Int,Int)
muh []=error "leere liste"
muh [x] = []
muh (x:y:xs)= (x,y):makeRouteofList (y:xs)
muh _ = []
--ps. diese beiden abbruch bedingungen hab ich reingemacht weil er es anders nicht akzeptiert hat.."Equations give diffrent arities ..." obwohl ich den unterschied nicht schnalle

so, wie man unschwer erkennen kann liefert mir die funktion die Kombinationen einer Liste der aufeinander folgenden Element und rest...
aber wie kann ich das nun per ListComprehension ausdrücken? würd ich die Menge so definieren würd ich einfach indeces benutzen aber gibt es die hier? ich hab nichts gefunden -.-...und alle anderen Versuche scheiterten, da ich immer zuviel des guten bekommen hab aber nicht weiter einschränken konnte

ich hoffe ihr habt bis hierhin gelesen und danke euch nochmals für eure mühe *sich verneig*
Zum Seitenanfang    
 
Siracusa

Gepostet:
04.12.2006 03:15

   
Hi,

schön, daß hier endlich mal wieder jemand postet.

Bin mir nicht sicher, ob ich dich richtig verstanden habe, aber ich nehme an, deine Funktion soll aus [0,1,1,2,3,5,8] bspw. [(0,1),(1,1),(1,2),(2,3),(3,5),(5,8)] machen. Das kann man durch folgende Funktion lösen:

muh :: [Int] -> [(Int,Int)]
muh ls = [(x,y)| sls<-[drop n ls | n<-[0..(length ls)-2]], let (x:y:_)=sls]


n<-[0..(length ls)-2] ... n durchläuft alle Werte von 0..Länge der Liste-2
sls<-[drop n ls | n<-[0..(length ls)-2]] ... hier werden alle Unterlisten erzeugt, die durch Streichen der ersten n Elemente aus der Originalliste entstehen (drop ist im Prelude definiert)
let (x:y:_)=sls ... x und y bilden die ersten beiden Elemente einer Unterliste

Viele Grüße,

Siracusa
Zum Seitenanfang    
 
daMSTRin

Gepostet:
04.12.2006 15:56

   
danke ^^
das ist genauso wie ichs haben wollte (hatte nur ne kleinigkeit vergessen aber die hab ich selbst hinzugekriegt ^^),
aber auf diese interessante verschachtelung um den index zu ersetzten wär ich wohl nie gekommen -.-...bleibt einen wohl nur üben üben üben Smilie
Zum Seitenanfang