RosettaCodeData/Task/Recamans-sequence/Haskell/recamans-sequence-2.hs

9 lines
393 B
Haskell

recaman :: Integer -> [Integer]
recaman n = reverse (go 0 0 [])
where
go i a_n xs | i > n = xs
| (am > 0) && (not (any (am ==) xs)) = go (i + 1) am (am : xs)
| otherwise = go (i + 1) ap (ap : xs)
where am = a_n - (i + 1)
ap = a_n + (i + 1)