Gepostet: |
foldr funktion | ||||||||||
hallo, wenn ich die funktion foldr habefoldr ( \\ 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 | |||||||||||
Gepostet: |
|||||||||||
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 ~
Da das erste Argument immer ignoriert wird, bleibt jedesmal die 0 übrig. |
|||||||||||
Zum Seitenanfang | |||||||||||
Gepostet: |
|||||||||||
okay, ich hab hier noch eine aufgabe aus der ich nicht schlau werde....:
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 | |||||||||||
Gepostet: |
|||||||||||
Erst einmal liefert h eine Funktion zurück, man könnte es auch schreiben als
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
|
|||||||||||
Zum Seitenanfang | |||||||||||