私は Haskell を学んでいますが、このチュートリアルの基本的な階乗関数に問題があります。
基本的に、階乗を次のように定義しました。
Prelude> let factorial 0 = 1
Prelude> let factorial n = n * factorial (n - 1)
タイプはチェックアウトします:
Prelude> :t factorial
factorial :: Num a => a -> a
これは理にかなっています。ただし、この関数の動作はそうではありません。(interactive): out of memory
入力が何であれ、それは結果になります。
Prelude> factorial 5
(interactive): out of memory
これは、メモリ不足エラーにつながる無限再帰呼び出しであると想定する必要がありますが、何が原因であるかはわかりません。factorial 0
これを 1 と明示的に宣言したにもかかわらず、同じことが で発生します。
Prelude> factorial 0
(interactive): out of memory
ここで奇妙な部分があります。階乗関数をファイルで定義すると、正常に機能します。tesths.hs
ファイルstを作成します。
factorial 0 = 1
factorial n = n * factorial (n - 1)
その後、GHCI に戻って を実行すると:l tesths.hs
、エラーなく実行factorial 5
できます。
何が起きてる?