Yellowstone sequence: Difference between revisions

Content added Content deleted
No edit summary
m (→‎{{header|Haskell}}: Applied Ormolu)
Line 645: Line 645:


yellowstone :: [Integer]
yellowstone :: [Integer]
yellowstone = 1 : 2 : 3 : unfoldr (Just . f) (2,3,[4..]) where
yellowstone = 1 : 2 : 3 : unfoldr (Just . f) (2, 3, [4 ..])
where
f :: (Integer, Integer, [Integer]) -> (Integer, (Integer, Integer, [Integer]))
f ::
f (p2, p1, rest) = (next, (p1, next, rest_)) where
(next, rest_) = select rest
(Integer, Integer, [Integer]) ->
select :: [Integer] -> (Integer, [Integer])
(Integer, (Integer, Integer, [Integer]))
f (p2, p1, rest) = (next, (p1, next, rest_))
select (x:xs)
where
| gcd x p1 == 1 && gcd x p2 /= 1 = (x, xs)
| otherwise = (y, x:ys)
(next, rest_) = select rest
select :: [Integer] -> (Integer, [Integer])
where (y, ys) = select xs
select (x : xs)
| gcd x p1 == 1 && gcd x p2 /= 1 = (x, xs)
| otherwise = (y, x : ys)
where
(y, ys) = select xs


main :: IO ()
main :: IO ()