我正在尝试编写一个函数

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/

10-13 06:38