Sha*_*abu 7 haskell integer peano-numbers
我正在尝试编写一个函数
toPeano :: Int -> Nat
toPeano n =
Run Code Online (Sandbox Code Playgroud)
将整数转换为其Peano数.
我有数据:
data Nat =
Zero |
Succ Nat
deriving Show
Run Code Online (Sandbox Code Playgroud)
例如,
toPeano 0 = Zero
toPeano 1 = Succ Zero
toPeano 2 = Succ (Succ Zero)
Run Code Online (Sandbox Code Playgroud)
等等.
我不知道如何在给定整数的情况下打印出Peano数字.我从未使用过Peano号码,所以对此有任何帮助将不胜感激!
谢谢!
你的问题不明确,所以我将从转换开始:
toPeano 0 = Zero
toPeano 1 = Succ Zero
toPeano 2 = Succ (Succ Zero)
Run Code Online (Sandbox Code Playgroud)
这很明确.您可以使用简单的递归定义Peano数字,并使其适用于所有自然:
toPeano 0 = Zero
toPeano x
| x < 0 = error "Can not convert a negative number to Peano"
| otherwise = Succ (toPeano (x-1))
Run Code Online (Sandbox Code Playgroud)
这里的核心是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
Run Code Online (Sandbox Code Playgroud)
打印结果
现在你说的看起来像一个问题的唯一部分是:
我不知道如何在给定整数的情况下打印出Peano数字.
这与Peano数字无关,但在GHCi中你可以运行以下任一功能:
> fromPeano (toPeano 5)
5
Run Code Online (Sandbox Code Playgroud)
或者你可以制作一个程序并print用来打印结果:
main = print (toPeano 5829)
Run Code Online (Sandbox Code Playgroud)
并使用GHC编译程序
$ ghc --make myProg.hs
$ ./myProg
Succ (Succ (Succ (...
Run Code Online (Sandbox Code Playgroud)