Declaratieve Talen/Oplossing Oneindige rij: verschil tussen versies
Naar navigatie springen
Naar zoeken springen
Geen bewerkingssamenvatting |
|||
Regel 35: | Regel 35: | ||
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 | ||
--[[Gebruiker:Michael Gobbers|Michael Gobbers]] 19 jan 2011 13:42 (UTC) | --[[Gebruiker:Michael Gobbers|Michael Gobbers]] 19 jan 2011 13:42 (UTC) | ||
===List Comprehension opl (1 regel)=== | |||
infinite :: a -> ([a] -> a) -> [a] | |||
infinite start fun = start:[ fun (take x (infinite start fun)) | x <- [1..]] |
Versie van 17 jan 2012 21:36
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 --Michael Gobbers 19 jan 2011 13:42 (UTC)
List Comprehension opl (1 regel)
infinite :: a -> ([a] -> a) -> [a] infinite start fun = start:[ fun (take x (infinite start fun)) | x <- [1..]]