Declaratieve Talen/Oplossing Oneindige rij: verschil tussen versies
Naar navigatie springen
Naar zoeken springen
Geen bewerkingssamenvatting |
|||
(10 tussenliggende versies door 6 gebruikers niet weergegeven) | |||
Regel 2: | Regel 2: | ||
infinite :: t -> ([t]->t) -> [t] | infinite :: t -> ([t]->t) -> [t] | ||
infinite b f = b:(infinite2 [b] f) | infinite b f = b:(infinite2 [b] f) | ||
where infinite2 voorstuk f = | where infinite2 voorstuk f = | ||
Regel 13: | Regel 13: | ||
De clou is het begin van de rij bijhouden in een parameter. | De clou is het begin van de rij bijhouden in een parameter. | ||
M'n inspiratie kwam uit de Fibonacci-rij op p.26 | 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 | |||
[[Gebruiker:Roald|Roald]] 12 jan 2010 22:37 (UTC) | |||
====Nog een alternatief==== | |||
Dit onafhankelijk van [[Gebruiker:Roald|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) | |||
[[Gebruiker:Kasper Meerts|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 | |||
--[[Gebruiker:Michael Gobbers|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..]] |
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..]]