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))。問題は、余分な括弧のペアです。実際には に引数を 1 つだけ渡してpowerいます((multiply a a) (b-1))(multiply a a)の結果が でありInt、引数を受け入れることができないため、この式自体は無効です。

これを次のように書き換える必要があります。

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