【发布时间】:2017-01-21 01:51:20
【问题描述】:
大家好,我在 Haskell 有这个家庭作业,我们必须使用 Nat 数据类型,它只给出 Zero 和 Succ(n) 一个。所以一个是Succ(Zero),两个是Succ(Succ(Zero)),以此类推。我们还应该递归地加减乘这些数据类型。
其中一个问题是这样的
--Add two natural numbers.
--
-- `>>> add one two`
-- Succ (Succ (Succ Zero))
--
-- `>>> add Zero one == one`
-- True
--
-- `>>> add two two == four`
-- True
--
-- `>>> add two three == add three two`
-- True
--
我的问题是当我进行递归时,我有一个基本情况,但正如我所说的那样,它只是返回基本情况并且不会特别冒泡。
任何关于如何在 Haskell 中使用模式匹配递归的帮助或解释将不胜感激
编辑:我的代码是
add :: Nat -> Nat -> Nat
add Zero Zero = Zero
add Zero (Succ i) = Succ(pred i)
add (Succ i) Zero = Succ(pred i)
add (Succ i) (Succ j) = Succ(add i j)
pred 是另一个函数
pred :: Nat -> Nat
pred Zero = Zero
pred (Succ Zero) = Zero
pred (Succ i) = Succ(pred i)
【问题讨论】:
-
显示你目前拥有的代码。
-
如果它只给你基本情况的结果,那听起来非基本情况只是重复出现而不对结果做任何事情,但你应该真正展示你的代码,所以我们可以告诉当然。