Function pow函数中的无限循环
我是Haskell的新手,这里有一个无限循环,但我不知道为什么Function pow函数中的无限循环,function,haskell,operator-precedence,Function,Haskell,Operator Precedence,我是Haskell的新手,这里有一个无限循环,但我不知道为什么 module Main where pow :: Int -> Int -> Int pow x 0 = 1 pow x y = x * pow x y-1 main :: IO () main = print( pow 2 3 ) 有什么想法吗 pow x y = x * pow x y-1 不会做你认为它会做的事。它被解析为 pow x y = (x) * (pow x y) - (1)
module Main where
pow :: Int -> Int -> Int
pow x 0 = 1
pow x y = x * pow x y-1
main :: IO ()
main = print( pow 2 3 )
有什么想法吗
pow x y = x * pow x y-1
不会做你认为它会做的事。它被解析为
pow x y = (x) * (pow x y) - (1)
^^^^^^^^^
infinite loop
现在您可以更清楚地看到无限循环。您需要在y-1中插入
pow x y = x * pow x (y-1)
x+pow x y-1
的意思是(x)+(pow x y)-(1)
,而不是x+(pow x(y-1))
。谢谢,这是有意义的=)当然不是(+),但是(*)=)@Lazyexpert是的,但这不是问题:)