Twoje pytanie nie jest jasne, więc zacznę od nawrócenia:
toPeano 0 = Zero
toPeano 1 = Succ Zero
toPeano 2 = Succ (Succ Zero)
To jest raczej jednoznaczna. Można zdefiniować numery Peano o rekursji prostej i mają tę pracę dla wszystkich Naturals:
toPeano 0 = Zero
toPeano x
| x < 0 = error "Can not convert a negative number to Peano"
| otherwise = Succ (toPeano (x-1))
Rdzeń jest tu Succ (toPeano (x-1))
- to tylko odejmuje jeden od liczby całkowitej i dodaje jedną z budową Peano.
A teraz o innym kierunku? Cóż, za każdym razem można zobaczyć „Succ” można po prostu dodać jeden:
fromPeano Zero = 0
fromPeano (Succ x) = 1 + fromPeano x -- note this is inefficent but right now we don't care
drukowania wyników
Teraz tylko część tego, co pan powiedział, że wyglądało to pytanie było:
Nie mam pojęcia, jak to zrobić, aby wydrukować Numery Peano z liczbą całkowitą.
To nie ma nic wspólnego z liczbami Peano, ale w GHCi można po prostu uruchomić jedną z tych funkcji:
> fromPeano (toPeano 5)
5
lub możesz zrobić program i używać print
wydrukować wyniki:
main = print (toPeano 5829)
i używać gHC skompilować program
$ ghc --make myProg.hs
$ ./myProg
Succ (Succ (Succ (...
czy można tego uniknąć 'check for <0' używając jakiegoś typu' Natural' numbers? –
Oczywiście, użyłem GADTs do kodowania binarnego w jednym pytaniu ([http://stackoverflow.com/questions/11910143/positive-integer-type/11912348#11912348]) i jestem pewien, że są inne sposoby, aby to zrobić. –