tua domanda non è chiaro, quindi inizierò dalla conversione:
toPeano 0 = Zero
toPeano 1 = Succ Zero
toPeano 2 = Succ (Succ Zero)
Questo è piuttosto esplicito. È possibile definire i numeri Peano con un semplice ricorsione e che hanno il lavoro per tutti naturali:
toPeano 0 = Zero
toPeano x
| x < 0 = error "Can not convert a negative number to Peano"
| otherwise = Succ (toPeano (x-1))
Il nucleo Ecco l'Succ (toPeano (x-1))
- questo solo un sottrae dal numero intero e aggiunge uno alla costruzione Peano.
Ora che ne dici di un'altra direzione? Bene, ogni volta che vedi "Succ" si può semplicemente aggiungere uno:
fromPeano Zero = 0
fromPeano (Succ x) = 1 + fromPeano x -- note this is inefficent but right now we don't care
stampa Risultati
Ora l'unica parte di quello che hai detto che sembrava una domanda era:
Non ho idea di come ottenerlo per stampare i numeri Peano dati un numero intero.
Questo non ha nulla a che fare con i numeri di Peano, ma in GHCi si può solo eseguire una di queste funzioni:
> fromPeano (toPeano 5)
5
o si può fare un programma e utilizzare print
di stampare i risultati:
main = print (toPeano 5829)
e utilizzare GHC per compilare il programma
$ ghc --make myProg.hs
$ ./myProg
Succ (Succ (Succ (...
fonte
2011-10-06 02:29:04
è possibile evitare questo 'controllo per <0' utilizzando un tipo di tipo di numeri' Natural'? –
Certo, ho usato GADT per codificare il binario in una domanda ([http://stackoverflow.com/questions/11910143/positive-integer-type/11912348#11912348]) e sono sicuro che ci siano altri modi per farlo. –