私は Haskell を学んでいます。これで階乗関数が生成されると思いました...
(ghci内)
Prelude> let ft 0 = 1
Prelude> let ft n = n * ft (n - 1)
Prelude> ft 5
(^C まで無期限にハングします)。
誰かが私を正しい方向に向けることができますか?
ありがとう!
2 つの別個のlet
ステートメントは、互いに独立して解釈されます。最初に関数ft 0 = 1
が定義され、次に新しい関数ft n = n * ft (n - 1)
が定義され、最初の定義が上書きされます。
2 つのケースを持つ 1 つの関数を定義するには、両方のケースを 1 つのlet
ステートメントに入れる必要があります。これを GHCI プロンプトで 1 行で行うには、次のように 2 つのケースを分けることができます;
。
Prelude> let ft 0 = 1; ft n = n * ft (n - 1)
Prelude> ft 5
120