Haskell Reusive类型int2nat

时间:2016-05-06 22:32:46

标签: haskell functional-programming

我正在研究Hutton的Haskell编程。

以下是第102页的代码。

int2nat :: Int -> Nat
int2nat 0 = Zero
int2nat (n+1) = Succ (int2nat n)

我在模式中得到一个解析错误:n + 1。 由于n,Int似乎不接受n + 1作为整数。 我该如何解决这个问题? 我也尝试过改变

  data Nat = Zero | Succ Nat 

data Nat = Zero | Succ Nat deriving Show

1 个答案:

答案 0 :(得分:1)

您正在使用" n + k模式" Haskell不支持。

您应该以这种方式更改代码:

int2nat :: Int -> Nat
int2nat 0 = Zero
int2nat n = Succ (int2nat (n-1))

如何在评论中写下here以获取更多信息。

此外,如果您插入一个负数,它将不会终止。 要避免这个问题,您可以试试这个:

int2nat :: Int -> Nat
int2nat 0 = Zero
int2nat n | n < 0  = Zero
          | otherwise = Succ (int2nat (n-1))