2

以下代码会产生错误:

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)
4

1 回答 1

3

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

您应该将其重写为

| otherwise   = power (multiply a a) (b-1)
于 2012-09-22T02:10:24.403 回答