如何使此代码与 Integer-> Int 类型签名一起使用?
How can I make this code to work with the Integer- > Int type signature?
此代码使用 Int-> [Int] 类型签名,但我必须使用 Integer -> [Int] 类型签名来解决它。我必须更改什么才能使其正常工作?
toBin :: Int -> [Int]
toBin n
| n == 0 = []
toBin n = [n `mod` 2] ++ toBin (n `div` 2)
您可以使用 fromIntegral :: (Integral a, Num b) => a -> b
将 Integer
(或任何 Integral
类型)转换为 Int
(或任何 Num
类型):
toBin :: Integer -> [Int]
toBin 0 = []
toBin n = [<strong>fromIntegral (</strong>n `mod` 2<strong>)</strong>] ++ toBin (n `div` 2)
如果 n
是一个 Integer
,那么 n `mod` `2
也是一个 Integer
。我们不能使用 n `mod` 2
作为列表的元素,因为 return 类型是 [Int]
,所以是 Int
的列表。因此,我们需要将 Integer
转换为 Int
以使元素的类型正确,并且我们可以将 Integer
转换为相应的 Int
(给定 Integer
可以用 Int
) 和 fromIntegral
.
表示
此代码使用 Int-> [Int] 类型签名,但我必须使用 Integer -> [Int] 类型签名来解决它。我必须更改什么才能使其正常工作?
toBin :: Int -> [Int]
toBin n
| n == 0 = []
toBin n = [n `mod` 2] ++ toBin (n `div` 2)
您可以使用 fromIntegral :: (Integral a, Num b) => a -> b
将 Integer
(或任何 Integral
类型)转换为 Int
(或任何 Num
类型):
toBin :: Integer -> [Int]
toBin 0 = []
toBin n = [<strong>fromIntegral (</strong>n `mod` 2<strong>)</strong>] ++ toBin (n `div` 2)
如果 n
是一个 Integer
,那么 n `mod` `2
也是一个 Integer
。我们不能使用 n `mod` 2
作为列表的元素,因为 return 类型是 [Int]
,所以是 Int
的列表。因此,我们需要将 Integer
转换为 Int
以使元素的类型正确,并且我们可以将 Integer
转换为相应的 Int
(给定 Integer
可以用 Int
) 和 fromIntegral
.