pow函数中的无限循环

Infinite loop in pow function

我是 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)
                ^^^^^^^^^
               infinite loop

现在你可以更清楚地看到无限循环了。你需要用括号 y-1,

pow x y = x * pow x (y-1)