Хаскелл Пеано Числа

Я пытаюсь написать функцию

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 с целым числом. Я никогда не работал с числами Пеано, поэтому любая помощь с этим будет принята с благодарностью!

Спасибо!

2 ответа

Ваш вопрос не ясен, поэтому я начну с преобразования:

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)) - это только вычитает одно из целого числа и добавляет его к конструкции Пеано.

Теперь как насчет другого направления? Ну, каждый раз, когда вы видите "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 (...

Будет ли что-то подобное тому, что вы ищете?

toPeano 0 = Zero
toPeano n = Succ $ toPeano (n-1)
Другие вопросы по тегам