【发布时间】:2018-10-25 01:48:09
【问题描述】:
我已经为自然数构建了自己的数据类型。
data Natural = Zero | Succ Natural
instance Show Natural where
show (Zero) = "0"
show (Succ Zero) = "S 0"
show (Succ n) = "S(" ++ show n ++ ")"
我正在尝试创建一个函数来与定义如下的基本数据类型(主要是 Int)进行交互:
intToNat:: Int -> Natural
intToNat 0 = Zero
intToNat n = (Succ n) - 1
natToInt:: Natural -> Int
natToInt Zero = 0
natToInt (Succ n) = 1 + natToInt n
好吧,这根本行不通,问题是,我必须将这个函数保留为递归函数。我不知道read 函数是否对此有所帮助。
更新:代码编译的一种方式是在函数中使用:
intToNat:: Int -> Natural
intToNat 0 = Zero
intToNat n = Succ(Succ Zero) --Obviusly this method return a constant number, in this case: 2.
所以在这种情况下,我猜是相关的,但我想知道是否有一种“递归”方式来定义Suc Zeron-1 次的“循环”。 p>
最终更新:intToNat 定义如下:
intToNat:: Int -> Natural
intToNat 0 = Zero
intToNat n = Suc(intToNat (n-1))
【问题讨论】:
-
您不需要(也不应该)在您的问题中包含答案。如果您觉得有必要分享解决方案,请将其发布为答案。
标签: haskell recursive-datastructures