www.jammni.de

Logo - Kleiner Drache
Login
Username:

Passwort:

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

Logo - DracheHaskell-Forum

paco89

Gepostet:
11.03.2012 15:02

foldr funktion  
hallo, wenn ich die funktion foldr habe

 foldr ( \\ x y -> y) 0 \"Viel Erfolg!\"  


wieso kommt bei der auswertung 0 raus und nicht \\\\\\\"Viel Erfolg\\\\\\\" ? ich hätte jetzt gedacht, dass die lambda funktion das zweite argument ausgibt und die 0 ist doch aber das 1. argument, oder etwa nicht.



edit: die foldr - funktion kannte ich vorher von listen, deren elemente aufsummiert wurden....in dem beispiel kann ich mir das allerdings nicht vorstellen....kann mir jmd. das ma in ruhe erklären....??
Zum Seitenanfang    
 
Landei

Gepostet:
13.03.2012 10:18

   
Wahrscheinlich verwechselst du das mit foldl, da sind die Argumente der übergebenen Funktion umgedreht.

Bei foldr verwurstet die Funktion zuerst das letzte Element der Liste (hier !) mit dem Vorgabewert (hier 0), dann das vorletzte Element der Liste mit dem Ergebnis u.s.w.

Schreiben wir die übergebene Funktion mal als Infix-Operation ~


E ~ (r ~ (f ~ (o ~ (l ~ (g ~ (! ~ 0))))))


Da das erste Argument immer ignoriert wird, bleibt jedesmal die 0 übrig.
Zum Seitenanfang    
 
paco89

Gepostet:
18.03.2012 14:54

   
okay, ich hab hier noch eine aufgabe aus der ich nicht schlau werde....:




h x y = foldr(\\u v-> x+y) (x+y)



aufruf h 1 2 [3,4,5] ergibt 3. muss ich hier dasselbe wie oben machen? ich gehe quasi meine liste entlang und suche meine 3, oder wie?
Zum Seitenanfang    
 
Landei

Gepostet:
19.03.2012 08:45

   
Erst einmal liefert h eine Funktion zurück, man könnte es auch schreiben als


h x y liste = foldr(\\u v-> x+y) (x+y) liste


Für eine leere Liste wird (x+y) zurückgegeben, in einem Iterationsschritt werden die Argumente u (das aktuelle Argument der Liste) und v (das bisherige Zwischenresultat) ignoriert und ebenfalls (x+y) zurückgeliefert. Damit kommt in jedem Fall (x+y) heraus, so dass man h auch definieren könnte als


h x y liste = x + y
Zum Seitenanfang