首页 > 解决方案 > • 没有因使用“/”而产生的 (Fractional Int) 实例

问题描述

test :: Int -> Int -> Int
test x y = x/y
main = print(test 20 20)

错误:

main.hs:2:12: error:
    • No instance for (Fractional Int) arising from a use of ‘/’
    • In the expression: x / y
      In an equation for ‘test’: test x y = x / y

请帮助我,我是 Haskell 的初学者并想学习它,即使我不知道在哪里可以使用它以及如何在某个地方实现它,我已经知道 javascript、java、php 和 lua,但我最擅长javascript和lua,如果你能回答我我在哪里可以实现haskell,我怎样才能很好地使用它,谢谢:) PS我已经检查了一些这样的帖子,但我并没有发现它们有帮助,我需要更简单的解释,谢谢

标签: haskell

解决方案


你不能Int用 来划分两个数字(/) :: Fractional a => a -> a -> a。如类型签名所示,这用于小数。AnInt不是一个数字,而是一个数字FractionalIntegral

您可以使用div :: Integral a => a -> a -> aquot :: Integral a => a -> a -> a代替:

test :: Int -> Int -> Int
test = div

不过这里不用写test = div,可以div直接使用。

功能divquot不等价。quot被截断为零,而div被截断为负无穷大。如果除以正数,那么这无关紧要,但如果分子或分母为负数,则可以得出不同的结果。例如:

Prelude> div 5 (-2)
-3
Prelude> quot 5 (-2)
-2

推荐阅读