如何使此代码与 Integer-> Int 类型签名一起使用?

Posted

技术标签:

【中文标题】如何使此代码与 Integer-> Int 类型签名一起使用?【英文标题】:How can I make this code to work with the Integer- > Int type signature? 【发布时间】:2021-12-10 09:16:48 【问题描述】:

此代码使用 Int-> [Int] 类型签名,但我必须使用 Integer -> [Int] 类型签名解决它。我必须进行哪些更改才能使其正常工作?

toBin :: Int -> [Int]
toBin n 
    | n == 0 = []
toBin n  =   [n `mod` 2] ++ toBin (n `div` 2) 

【问题讨论】:

【参考方案1】:

您可以使用fromIntegral :: (Integral a, Num b) => a -> bInteger(或任何Integral 类型)转换为Int(或任何Num 类型):

toBin :: Integer -> [Int]
toBin 0 = []
toBin n = [fromIntegral (n `mod` 2)] ++ toBin (n `div` 2)

如果nInteger,那么n `mod` `2 也是Integer。我们不能使用n `mod` 2 作为列表的元素,因为返回类型是[Int],所以是Ints 的列表。因此,我们需要将Integer 转换为Int 以使元素的类型正确,并且我们可以将Integer 转换为相应的Int(假设Integer 可以用@ 表示987654340@) 和fromIntegral

【讨论】:

是的,但在这种情况下,绝对应该讨论一下(双关语不是有意)为什么这种转换实际上是合适的以及为什么应该在那个地方进行。

以上是关于如何使此代码与 Integer-> Int 类型签名一起使用?的主要内容,如果未能解决你的问题,请参考以下文章

如何使此图像正确显示?

在double,int,long和short类型中,有多少可以填充空白以使此代码输出0? [重复]

如何将 Vector<Integer> 转换为 int[]? [复制]

如何把int转换成integer

Integer与int的区别

如何在 Java 中将 int[] 转换为 List<Integer>?