www.jammni.de

Logo - Kleiner Drache
Login
Username:

Passwort:

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

Logo - DracheHaskell-Forum

Luks

Gepostet:
21.11.2009 11:17

endrekursive Versionen  
ich muss endrekursive Versionen von length und take schreiben, hab aber irgendwie null plan wie das gehen soll....
ich weiß zwar was endrekursiv ist, aber da höhrts auch schon auf....

außerdem noch für die funktionen induction und iter
Zum Seitenanfang    
 
Siracusa

Gepostet:
21.11.2009 22:12

   
Hi,

endrekursive Funktionen erhält man meist recht einfach durch Erweiterung der Parameterliste und einer zusätzlichen Hilfsfunktion. Mal ein Beispiel:
-- nicht endrekursiv:
sum :: Integer -> Integer
sum 0 = 0
sum n = n + sum (n-1)

-- endrekursiv:
sum :: Integer -> Integer
sum n = sum' n 0
where
sum' 0 acc = acc
sum' n acc = sum' (n-1) (acc+n)

Die Berechnung im rekursiven Teil rückt in den zusätzlichen Parameter (Akkumulator); die Hilfsfunktion entspricht der nicht-endrekursiven Version der Funktion, vor die nur noch eine Funktion vorgeschaltet wird, die den Akkumulator initialisiert.


Viele Grüße,

Siracusa
Zum Seitenanfang    
 
Luks

Gepostet:
22.11.2009 14:48

   
ok danke
Zum Seitenanfang