我正在研究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
答案 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))