在haskell中,我如何从十进制数制作二进制数?



实现Bin函数,该函数以倒序的方式返回非负整数的二进制数!

的例子:

  • 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

我想把我的除法结果返回给Bin函数并再次对其进行建模,等等。我怎么解决这个问题?能帮我一下吗?

只有一个参数,所以bin的实现看起来像:

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

可以用divMod :: Integral a => a -> a -> (a, a)确定模数并除以2,我们可以使用where子句来设置变量dm:

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

我们不能直接使用m,因为这是Integer而不是Int,我们可以使用fromIntegral :: (Integral a, Num b) => a -> bInteger转换为Int

因此,我们需要构造一个列表,其中m是该列表的一个元素,并使用递归来确定列表的其他项。因此,部分应该构造这样的列表。我把这个留作练习。提示:您可以构建一个列表,其中x作为第一项,xs作为(x:xs)的剩余项的列表。

相关内容

  • 没有找到相关文章

最新更新