Eri*_*rek 0 haskell recursive-datastructures
我已经为自然数字构建了自己的数据类型.
data Natural = Zero | Succ Natural
instance Show Natural where
show (Zero) = "0"
show (Succ Zero) = "S 0"
show (Succ n) = "S(" ++ show n ++ ")"
Run Code Online (Sandbox Code Playgroud)
我正在尝试创建一个函数来与基本数据类型(主要是Int)进行交互,如下所示:
intToNat:: Int -> Natural
intToNat 0 = Zero
intToNat n = (Succ n) - 1
natToInt:: Natural -> Int
natToInt Zero = 0
natToInt (Succ n) = 1 + natToInt n
Run Code Online (Sandbox Code Playgroud)
嗯,这根本不起作用,问题是,我必须将此函数保持为递归函数.我不知道这个read功能是否有用.
更新:代码编译方式的方式是在函数中使用:
intToNat:: Int -> Natural
intToNat 0 = Zero
intToNat n = Succ(Succ Zero) --Obviusly this method return a constant number, in this case: 2.
Run Code Online (Sandbox Code Playgroud)
所以在这种情况下,我猜是相关的,但我想知道是否有一种'递归'方式来定义Suc Zero n-1次'循环' .
最后更新:将intToNat作为其定义如下:
intToNat:: Int -> Natural
intToNat 0 = Zero
intToNat n = Suc(intToNat (n-1))
Run Code Online (Sandbox Code Playgroud)
natToInt看起来不错. Zero,Succ n和n所有都有类型Natural.1并且natToInt n有类型Int.你打电话+给两个人Int.
在inToNat,n有类型Int,但Succ需要一个Natural.然后尝试减去1从Natural,但你还没有定义-的Natural(至少不是在你的问题的代码).你intToNat不是递归的,但你可能想要它.
你通常走在正确的轨道上. read没有必要.
| 归档时间: |
|
| 查看次数: |
49 次 |
| 最近记录: |