Declaratieve Talen/Oplossing Oneindige rij: verschil tussen versies
Naar navigatie springen
Naar zoeken springen
3de alternatief voor oneindige rij oplossing toegevoegd |
Geen bewerkingssamenvatting |
||
Regel 30: | Regel 30: | ||
===Alternatief 3=== | ===Alternatief 3=== | ||
infinite::t->([t]->t)->[t] | infinite::t->([t]->t)->[t] | ||
infinite x f = (f [x]):infinite2 [x] f | infinite x f = (f [x]):infinite2 [x] f | ||
infinite2::[t]->([t]->t)->[t] | |||
infinite2::[t]->([t]->t)->[t] | infinite2 (x:xs) f = f (x:xs):infinite2 ((x:xs) ++ [f (x:xs)]) f | ||
infinite2 (x:xs) f = f (x:xs):infinite2 ((x:xs) ++ [f (x:xs)]) f |
Versie van 19 jan 2011 13:42
Een oplossing
infinite :: t -> ([t]->t) -> [t] infinite b f = b:(infinite2 [b] f) where infinite2 voorstuk f = let res = f voorstuk in res:(infinite2 (voorstuk ++ [res]) f)
De clou is het begin van de rij bijhouden in een parameter.
M'n inspiratie kwam uit de Fibonacci-rij op p.26
Alternatief
infinite::t->([t]->t)->[t] infinite x f = x:inf [x] f where inf r f = f r : inf ((f r):r) f
Roald 12 jan 2010 22:37 (UTC)
Nog een alternatief
Dit onafhankelijk van Roald opgelost. Het idee is hetzelfde, maar ik bouw de lijst in de omgekeerde richting op.
infinite x f = infinite' [x] f where infinite' l f = (last l) : (infinite' (l ++ [f l]) f)
Kasper Meerts 15 jul 2010 21:12 (UTC)
Alternatief 3
infinite::t->([t]->t)->[t] infinite x f = (f [x]):infinite2 [x] f infinite2::[t]->([t]->t)->[t] infinite2 (x:xs) f = f (x:xs):infinite2 ((x:xs) ++ [f (x:xs)]) f