あなたの質問は明確ではないので、私は、変換から始めましょう:
toPeano 0 = Zero
toPeano 1 = Succ Zero
toPeano 2 = Succ (Succ Zero)
これはかなり明示的です。あなたはすべてナチュラルのために簡単な再帰でペアノ番号を定義し、その仕事を持つことができます。
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を減算し、ペアノの建設に1を追加します。
もう一方の方向はどうですか?さて、あなたは「成功回数」を見るたびに、あなただけの1を追加することができます。
fromPeano Zero = 0
fromPeano (Succ x) = 1 + fromPeano x -- note this is inefficent but right now we don't care
印刷が
さて、質問のように見えたあなたが言ったことの一部だけだった結果:
を
整数を与えられたPeano Numbersを印刷する方法を知りません。
これはペアノ番号とは何の関係もありませんが、GHCiの中であなただけのこれらの関数のいずれかを実行することができます。
> fromPeano (toPeano 5)
5
それとも、プログラムを作成し、結果をプリントアウトするprint
を使用することができた:
main = print (toPeano 5829)
とプログラム
$ ghc --make myProg.hs
$ ./myProg
Succ (Succ (Succ (...
をコンパイルするためにGHCを使用
「Natural」の数値型を使用することで、この「<0」のチェックを回避できますか? –
もちろん、GADTを使用して1つの質問([http://stackoverflow.com/questions/11910143/positive-integer-type/11912348#11912348])でバイナリをエンコードし、これを行う方法が他にもあると確信しています。 –