Van Eck sequence: Difference between revisions

Content added Content deleted
(Added XPL0 example.)
(→‎{{header|Haskell}}: Tidied mapAccumL version.)
Line 1,610: Line 1,610:
<lang haskell>{-# LANGUAGE TupleSections #-}
<lang haskell>{-# LANGUAGE TupleSections #-}


import qualified Data.Map.Strict as M hiding (drop)
import Data.List (mapAccumL)
import Data.List (mapAccumL)
import qualified Data.Map.Strict as M hiding (drop)
import Data.Maybe (maybe)
import Data.Maybe (maybe)

--------------------- VAN ECK SEQUENCE -------------------


vanEck :: [Int]
vanEck :: [Int]
Line 1,618: Line 1,620:
where
where
go (x, dct) i =
go (x, dct) i =
((,) =<< (, M.insert x i dct)) (maybe 0 (i -) (M.lookup x dct))
((,) =<< (, M.insert x i dct))
(maybe 0 (i -) (M.lookup x dct))


--------------------------- TEST -------------------------
main :: IO ()
main :: IO ()
main =
main =
mapM_ print $
mapM_ print $
fmap
(drop . subtract 10 <*> flip take vanEck) <$>
((drop . subtract 10) <*> flip take vanEck)
[10, 1000, 10000, 100000, 1000000]</lang>
[10, 1000, 10000, 100000, 1000000]</lang>
{{Out}}
{{Out}}
<pre>[0,0,1,0,2,0,2,2,1,6]
<pre>[0,0,1,0,2,0,2,2,1,6]