在 haskell 中,如何从十进制数生成二进制数字?
In haskell how can I make binary digits from a decimal number?
实现Bin函数,returns一个非负整数的二进制数倒序!
示例:
- bin 0 == []
- 容器 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 函数并再次 mod 等等。
我该如何解决这个问题?我能得到一些帮助吗?
只有一个参数,所以bin
的实现是这样的:
bin :: Integer -> [Int]
bin 0 = []
bin n = …
我们可以用 divMod :: Integral a => a -> a -> (a, a)
确定模并将数字除以二,我们可以使用 where
子句来设置变量 d
和 m
:
bin :: Integer -> [Int]
bin 0 = []
bin n = …
where <b>(d, m) = divMod n 2</b>
我们不能直接使用 m
,因为这是 Integer
,而不是 Int
,我们可以使用 fromIntegral :: (Integral a, Num b) => a -> b
将 Integer
到 Int
.
因此,我们需要构建一个列表,其中 m
作为该列表的元素,并使用递归来确定列表的其他项。因此 …
部分应该构建这样的列表。我把它留作练习。提示:您可以构建一个列表,其中 x
作为第一个项目, xs
作为剩余项目的列表, (x:xs)
.
实现Bin函数,returns一个非负整数的二进制数倒序!
示例:
- bin 0 == []
- 容器 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 函数并再次 mod 等等。 我该如何解决这个问题?我能得到一些帮助吗?
只有一个参数,所以bin
的实现是这样的:
bin :: Integer -> [Int]
bin 0 = []
bin n = …
我们可以用 divMod :: Integral a => a -> a -> (a, a)
确定模并将数字除以二,我们可以使用 where
子句来设置变量 d
和 m
:
bin :: Integer -> [Int]
bin 0 = []
bin n = …
where <b>(d, m) = divMod n 2</b>
我们不能直接使用 m
,因为这是 Integer
,而不是 Int
,我们可以使用 fromIntegral :: (Integral a, Num b) => a -> b
将 Integer
到 Int
.
因此,我们需要构建一个列表,其中 m
作为该列表的元素,并使用递归来确定列表的其他项。因此 …
部分应该构建这样的列表。我把它留作练习。提示:您可以构建一个列表,其中 x
作为第一个项目, xs
作为剩余项目的列表, (x:xs)
.