无法将预期类型Int与实际类型Int匹配 - >在哈斯克尔的Int

时间:2012-09-22 02:04:05

标签: haskell

以下代码会产生错误:

power:: Int -> Int -> Int
power a b 
        | a ==0 || b == 0      = 0
        | otherwise   = power ((multiply a a) (b-1))

multiply:: Int -> Int -> Int
multiply a b
        | a <= 0        = 0
        | otherwise     = (multiply (a-1) (b)) + b

返回的错误是

power.hs:6:25:
    Couldn't match expected type `Int' with actual type `Int -> Int'
    In the return type of a call of `power'
    Probable cause: `power' is applied to too few arguments
    In the expression: power (multiply (a a) b - 1)
    In an equation for `power':
        power a b
          | b == 0 = 0
          | otherwise = power (multiply (a a) b - 1)

1 个答案:

答案 0 :(得分:3)

错误在表达式power ((multiply a a) (b-1))中。问题是额外的一对括号。实际上,您只将一个参数传递给power,即((multiply a a) (b-1))。此表达式本身无效,因为(multiply a a)的结果是Int,它不能接受参数。

您应该将其重写为

| otherwise   = power (multiply a a) (b-1)