我正在尝试编写一个函数
toPeano :: Int -> Nat
toPeano n =
将整数转换为Peano号。
我有数据:
data Nat =
Zero |
Succ Nat
deriving Show
例如,
toPeano 0 = Zero
toPeano 1 = Succ Zero
toPeano 2 = Succ (Succ Zero)
等等。
我不知道如何让它打印出给定整数的Peano数。我从来没有使用过Peano号码,因此对此提供的任何帮助将不胜感激!
谢谢!
最佳答案
您的问题尚不清楚,所以我将从转换开始:
toPeano 0 = Zero
toPeano 1 = Succ Zero
toPeano 2 = Succ (Succ Zero)
这是相当明确的。您可以通过简单的递归来定义Peano数,并使它适用于所有自然数:
toPeano 0 = Zero
toPeano x
| x < 0 = error "Can not convert a negative number to Peano"
| otherwise = Succ (toPeano (x-1))
此处的核心是
Succ (toPeano (x-1))
-它只是从整数中减去1,并将其加到Peano结构中。现在,另一个方向呢?好吧,每次您看到“Succ”时,您都可以添加一个:
fromPeano Zero = 0
fromPeano (Succ x) = 1 + fromPeano x -- note this is inefficent but right now we don't care
打印结果
现在,您所说的唯一看起来像是一个问题的部分是:
我不知道如何让它打印出给定整数的Peano数。
这与Peano编号无关,但是在GHCi中,您可以运行以下任一函数:
> fromPeano (toPeano 5)
5
或者,您可以编写一个程序并使用
print
打印结果:main = print (toPeano 5829)
并使用GHC编译程序
$ ghc --make myProg.hs
$ ./myProg
Succ (Succ (Succ (...
关于haskell - Haskell Peano数字,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/7669658/