我在使用此代码时遇到问题。我试图写一个简单的函数,它接受两个列表并尝试用列表B的相应元素划分列表A的每个元素。如果列表B中的元素是0,它应该返回Nothing
,否则它应该返回Just (a / b)
。
以下是代码:
divlist :: Integral a => [a] -> [a] -> [Maybe a]
divlist = zipWith (\x y -> if (y /= 0) then Just (x / y) else Nothing)
这可能是愚蠢的事,但我根本无法找到它。
编辑:这就是ghci报道的内容:
C:\Users\spravce\Desktop\Haskell\6.hs:16:51: error:
• Could not deduce (Fractional a) arising from a use of ‘/’
from the context: Integral a
bound by the type signature for:
divlist :: Integral a => [a] -> [a] -> [Maybe a]
at C:\Users\spravce\Desktop\Haskell\6.hs:14:1-48
Possible fix:
add (Fractional a) to the context of
the type signature for:
divlist :: Integral a => [a] -> [a] -> [Maybe a]
• In the first argument of ‘Just’, namely ‘(x / y)’
In the expression: Just (x / y)
In the expression: if (y /= 0) then Just (x / y) else Nothing
Failed, modules loaded: none.
编辑2:
使用div x y
代替x / y
就行了。 :)谢谢。
答案 0 :(得分:7)
您在函数中指定Integral
约束,但在函数内使用(/)
表示分数除法。
你可能想要使用div
,这是整体划分,例如3 `div` 2 == 1
。否则,将约束从Integral
更改为Fractional
(这是错误消息告诉您要执行的操作)。