3

他の質問や問題は似ていますが、これとはまったく異なります。この特定のコンパイラ エラーでは、次の理由により、Haskell GHC は次のコードをコンパイルしません。まったくわかりません。コードはかなり単純です。

--factorial

fact :: int -> int
fact 0 = 1
fact n | n > 0 = n * fact(n - 1)

main = print (fact 10)

(エラー:)

No instance for (Ord int) arising from a use of `>'
Possible fix:
add (Ord int) to the context of
the type signature for fact :: int -> int
In the expression: n > 0
In a stmt of a pattern guard for
an equation for `fact':
n > 0
In an equation for `fact': fact n | n > 0 = n * fact (n - 1)

問題を説明してもらえますか?

4

1 に答える 1

6

Intあなたが望むものです:

fact :: int -> int

-->

fact :: Int -> Int

Haskell では、型は大文字で始まる必要があります。

編集:これにコメントしてくれたYurasに感謝します:

または、必要に応じて型クラスを使用できます。

fact :: Integral a => a -> a

また、型変数には、 など、好きな名前を付けることができますint。また、Num一般的な数値よりも階乗を定義したい場合は、目的により適している可能性があります。

于 2013-06-29T02:25:34.940 に答える