2016-09-03 15 views
0

私はハスケルを新しくしています。ここでは無限ループが発生していますが、理由はわかりません。pow関数の無限ループ

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) 

+2

'X + POWのX、Y-1 '意味'(X)+(POW XY)を括弧する必要'。 –

答えて

8
pow x y = x * pow x y-1 

あなたはそう思わないと思います。

pow x y = (x) * (pow x y) - (1) 
       ^^^^^^^^^ 
       infinite loop 

ここで、無限ループをより明確に見ることができます。 (1) 'ではなく' X +(POW X(Y-1)) - あなたはy-1

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

ありがとう、これは理にかなっています) – Lazyexpert

+0

確かに(+)ではなく、(*)=))) – Lazyexpert

+0

@Lazyexpertはい、それは質問ではありませんでした:) – Rakete1111