Declaratieve Talen/Oplossing Oneindige rij: verschil tussen versies
Naar navigatie springen
Naar zoeken springen
Geen bewerkingssamenvatting |
|||
Regel 37: | Regel 37: | ||
===List Comprehension | ===Oplossing met List Comprehension=== | ||
infinite :: a -> ([a] -> a) -> [a] | infinite :: a -> ([a] -> a) -> [a] | ||
infinite start fun = start:[ fun (take x (infinite start fun)) | x <- [1..]] | infinite start fun = start:[ fun (take x (infinite start fun)) | x <- [1..]] |
Huidige versie van 17 jan 2012 21:37
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)
Oplossing met List Comprehension
infinite :: a -> ([a] -> a) -> [a] infinite start fun = start:[ fun (take x (infinite start fun)) | x <- [1..]]