Haskell in 5 stepsでは、階乗関数は次のように定義されます。
let fac n = if n == 0 then 1 else n * fac (n-1)
しかし、ハグの場合は、fac を fac.h にする必要があると書かれています。これが事実である理由を誰か説明できますか?名前付き関数を定義する機能がないことは、インタープリターにとって大きな制限のように思えますか?
Haskell in 5 stepsでは、階乗関数は次のように定義されます。
let fac n = if n == 0 then 1 else n * fac (n-1)
しかし、ハグの場合は、fac を fac.h にする必要があると書かれています。これが事実である理由を誰か説明できますか?名前付き関数を定義する機能がないことは、インタープリターにとって大きな制限のように思えますか?
Hugsは、名前付き関数(再帰的かどうか)を定義する機能を見逃しています。また、データ型を定義する機能もありません。
私が知る限りの基本的な答えは、Hugs のインタラクティブなトップレベルは本質的に式パーサーであり、関数/データ定義は式ではないということです。あなたがそれを式にして書いた場合、あなたの例は実際に機能しますlet fac n = if n == 0 then 1 else n * fac (n-1) in fac 19
。これに対するサポートを追加することはかなりの労力を要し、明らかに Hugs の実装者は、関数/データの定義がファイルにあることを要求するだけで十分であると考えていました。