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 回答