Variable-length quantity: Difference between revisions

Content added Content deleted
(→‎{{header|Haskell}}: Added type signatures, slight tidying)
Line 670: Line 670:
Homemade Version:
Homemade Version:


<lang Haskell>base = 8
<lang Haskell>import Data.List (intercalate)


base :: Int
base = 8

to :: Int -> [Int]
to 0 = []
to 0 = []
to i = to (div i base) ++ [mod i base]
to i = to (div i base) ++ [mod i base]


from = foldl1 (\x y -> x*base + y)
from :: [Int] -> Int
from = foldl1 (\x y -> x * base + y)

main = do
fancy 2097152
fancy 2097151
where fancy i = putStrLn $ concatMap show (to i) ++ " <-> " ++ show (from $ to i)</lang>


main :: IO ()
main =
mapM_
(putStrLn .
intercalate " <-> " .
(((:) . concatMap show . to) <*> (return . show . from . to)))
[2097152, 2097151]
</lang>
{{out}}
{{out}}
<pre>10000000 <-> 2097152
<pre>10000000 <-> 2097152