www.jammni.de

Logo - Kleiner Drache
Login
Username:

Passwort:

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

Logo - DracheHaskell-Forum

Kotori

Gepostet:
21.11.2009 23:22

Endrekursion - Brauche ein wenig Hilfe  
Hallo :)

Ich sitze jetzt seit geraumer Zeit an den Aufgaben zur Endrekursion.
Ich soll folgende Funktionen in Endrekursion schreiben: length, take, induction und iter.

für length und take habe ich das soweit gemacht, doch ich kann die Funktionen nicht aufrufen, da ich immer wieder diese Fehlermeldung in WinHugs bekomme:
Syntax error in declaration (unexpected keyword "where")

length' :: [a] -> Int
length'0 xs []
where
acc = acc
length'0 (x:xs) acc = length'0 xs (x:acc)

take' :: Int -> [a] -> [a]

take'0 xs []
where
take'0 (x:xs) = if n == 0 then acc
else x: take (n-1) xs acc

<- soweit mein Code. Ich bin nicht ganz sicher, ob das hier schon tut was es soll...

bei iter und induction fällt mir derzeit kein Ansatz ein :(

Über Hilfe und eventuelle Fehleraufzeigungen würde ich mich wirklich freuen!
Zum Seitenanfang    
 
Siracusa

Gepostet:
22.11.2009 01:35

   
Hallo,

length' :: [a] -> Int
length'0 xs []


Da stimmt was nicht! length' soll als ersten Parameter eine Liste bekommen, bei dir steht da aber 0, außerdem ist da mindestens ein Parameter zu viel. Desweiteren fehlt eine rechte Seite, weswegen Hugs meckert (ein = wird erwartet, aber plötzlich steht ein where da).

bei iter und induction fällt mir derzeit kein Ansatz ein :(

Was sind iter und induction?


Viele Grüße,

Siracusa
Zum Seitenanfang    
 
Kotori

Gepostet:
22.11.2009 14:55

   
Okay, werde es nochmals umschreiben. Danke ;)

Induction ist definiert durch:

induction base comb n
| n == 0 = base
| n > 0 = comb n (induction base comb (n-1))

und iter durch:

iter :: Int -> (a -> a) -> (a -> a)
iter n f
| n > 0 = f . iter (n-1) f
|otherwise = id

(laut unseren Vorlesungsfolien...)

wenn ich mir induction ansehe, würde ich sagen geht das auch mittels eines akkumulators, aber bei iter bin ich nicht sicher. :(

Danke im voraus!
Zum Seitenanfang    
 
Siracusa

Gepostet:
22.11.2009 16:42

   
Bei iter sollte das genau nach dem gleichen Prinzip auch gehen, und zwar einfach die Funktionsverknüpfung . in den Akkumulator packen. Der akkumuliert dann halt nicht Werte, sondern baut schrittweise eine längere Funktion auf.


Viele Grüße,

Siracusa
Zum Seitenanfang