【问题标题】:Haskell recursive types int2nat [duplicate]Haskell递归类型int2nat [重复]
【发布时间】:2020-01-26 16:05:25
【问题描述】:

我正在学习 Hutton 的 Haskell 编程。

下面是第 102 页的代码。

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

我在模式中遇到解析错误:n + 1。 似乎 Int 由于 n 不接受 n+1 作为整数。 我该如何解决这个问题?

我也尝试过改变:

  data Nat = Zero | Succ Nat 

data Nat = Zero | Succ Nat deriving Show

【问题讨论】:

    标签: haskell functional-programming


    【解决方案1】:

    您正在使用 Haskell 不支持的“n + k 模式”。

    你应该这样改变你的代码:

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

    如何写在 cmets 阅读 here 以获取更多信息。

    此外,如果您插入负数,它不会终止。 为了避免这个问题,也许你可以试试这个:

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

    【讨论】:

      猜你喜欢
      • 2016-06-15
      • 1970-01-01
      • 2016-09-20
      • 1970-01-01
      • 2023-03-12
      • 1970-01-01
      • 2021-05-28
      • 2017-07-26
      • 2016-05-23
      相关资源
      最近更新 更多