7

私は関数を書こうとしています

toPeano :: Int -> Nat
toPeano n =

整数をペアノ番号に変換します。

私はデータを持っています:

data Nat =
   Zero |
   Succ Nat
   deriving Show

例えば、

toPeano 0 = Zero
toPeano 1 = Succ Zero
toPeano 2 = Succ (Succ Zero)

等々。

整数を指定して Peano Numbers を出力する方法がわかりません。私はペアノ数を扱ったことがないので、これに関する助けがあれば大歓迎です!

ありがとうございました!

4

2 に答える 2

7

あなたの質問は明確ではないので、変換から始めます:

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 を足すだけです。

では、反対方向はどうでしょうか。「Succ」が表示されるたびに、次のように追加できます。

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 を使用してプログラムをコンパイルします。

$ ghc --make myProg.hs
$ ./myProg
Succ (Succ (Succ (...
于 2011-10-06T02:29:04.230 に答える
1

このようなものをお探しですか?

toPeano 0 = Zero
toPeano n = Succ $ toPeano (n-1)
于 2011-10-06T10:34:25.957 に答える