Home > other >  In haskell how can I make binary digits from a decimal number?
In haskell how can I make binary digits from a decimal number?

Time:10-25

Implement the Bin function, which returns the binary digits of a non-negative integer in reverse order!

Example:

  • Bin 0 == []
  • Bin 1 == [1]
  • Bin 2 == [0,1]
  • Bin 10 == [0, 1, 0, 1]
Bin :: Integer -> [Int]
Bin 0 = []
Bin a `div` 2 = b
Bin a `mod` 2 = c

I would like to give back my divide result to the Bin function and mod it again and etc.. How can I solve this ? Can I get some help ?

CodePudding user response:

There is only one parameter, so the implementation of bin looks like:

bin :: Integer -> [Int]
bin 0 = []
bin n = …

we can determine the modulo and divide the number by two with divMod :: Integral a => a -> a -> (a, a), we can use a where clause to set variables d and m:

bin :: Integer -> [Int]
bin 0 = []
bin n = …
    where (d, m) = divMod n 2

we can not use m directly, since this is an Integer, and not an Int, we can work with fromIntegral :: (Integral a, Num b) => a -> b to convert the Integer to an Int.

We thus will need to construct a list with m as an element of that list, and use recursion to determine the other items of the list. The part should thus construct such list. I leave that as an exercise. Hint: you can construct a list with x as first item and xs as a list of remaining items with (x:xs).

  • Related