2016-05-06 39 views
-2

我正在學習Hutton編程Haskell。Haskell Recusive Types int2nat

下面是102頁

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

我的模式得到一個解析錯誤:N + 1 好像詮釋不接受N + 1爲由於n整數。 我該如何解決這個問題? 我也試着改變

data Nat = Zero | Succ Nat 

data Nat = Zero | Succ Nat deriving Show

回答

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))