Haskell输入多个数字 - >输出多个数字+除法

STU*_*IFE 0 haskell

我想得到3个数字的输入,并作为输出多个结果.

我的代码:

t :: Integer -> Integer -> Integer -> (Integer,Integer,Integer)
t a b c = ((a+b)/2,(a+b+c)/3,(b+c)/2)
Run Code Online (Sandbox Code Playgroud)

但这似乎是一个问题:

Lab2.hs:17:17:
No instance for (Fractional Integer) arising from a use of `/'
Possible fix: add an instance declaration for (Fractional Integer)
In the expression: (a + b) / 2
In the expression: ((a + b) / 2, (a + b + c) / 3, (b + c) / 2)
In an equation for `t':
    t a b c = ((a + b) / 2, (a + b + c) / 3, (b + c) / 2)
Failed, modules loaded: none.
Run Code Online (Sandbox Code Playgroud)

问题是多重输出或我试图做的分歧......

Zet*_*eta 5

(/) 有以下类型:

(/) :: Fractional a => a -> a -> a
Run Code Online (Sandbox Code Playgroud)

Integer不是一个实例Fractional.毕竟,将整数除以整数的结果可能不是整数(例如3/2).

你想用div:

div :: Integral a => a -> a -> a
Run Code Online (Sandbox Code Playgroud)

Integer是有效的Integral(通过使用检查:info Integer).您可以使用中缀表示法来保持清晰:

(a + b) `div` 2
Run Code Online (Sandbox Code Playgroud)

  • 你并没有真正"使用"程序逻辑中的"div ::"或":: Fractional".简单地说,每当你看到像NAME :: a - > b - > c这样的东西时,它意味着"名为NAME的函数,取'a'类型的东西,然后是'b'类型的东西,并返回类型的东西'c'"或更通俗地说,NAME有类型a - > b - > c.现在,当你在图片中添加"Integral a =>"之类的东西时,它只是意味着"a不必是特定类型,但它必须像Integral(整数)一样. (2认同)