我正在尝试编写一个函数
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号码,所以对此有任何帮助都会非常感激!
谢谢!
答案 0 :(得分:7)
你的问题不明确,所以我将从转换开始:
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))
- 这只是从整数中减去一个,并将一个加到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 (...
答案 1 :(得分:1)
这样的事情会是你想要的吗?
toPeano 0 = Zero
toPeano n = Succ $ toPeano (n-1)