0

ハグを使用して、順列の数を計算する単純な Haskell 関数をコンパイルしています。整数を返したいのですが、浮動小数点数を操作する必要があります。答えを Float として計算してから切り捨てようとしましたが、何らかの理由でうまくいきません。

これは関数です:

choose :: Float -> Float -> Integer
 choose n r = truncate (chooseF (n r))
    where
        chooseF::Float->Float->Float
        chooseF n r | n==r = 1
                        | otherwise =  n / (n-r) * chooseF(n-1) r

これはエラーです (35 行目は関数の 2 行目です)。

ERROR "/homes/mb4110/SimpleMath":35 - Type error in application
*** Expression     : n r
*** Term           : n
*** Type           : Float
*** Does not match : a -> b

おそらく私が行方不明であることは明らかですが、私はこれにかなりの時間を費やしてきましたが、解決策が思いつきません。

4

2 に答える 2

4

chooseFは 2 つの引数を取りますが、括弧があるため、n r1 つの引数として解析されます。したがって、括弧を削除するn rと問題ありません。

于 2011-10-06T14:53:00.010 に答える
2

問題は、 に渡し(n r)ていることですchooseF。Hugs はこれから、項が渡されるnタイプの何らかの関数でなければならないと判断します。この結果は、部分的に に適用されます。a -> brchooseF

おそらく、代わりにとaschooseFの両方のパラメーターを使用して呼び出したいと考えていました。このエラーを修正するには、代わりに を呼び出してください。nrchooseF n r

于 2011-10-06T14:53:49.143 に答える