Хаскелл Пеано Числа - PullRequest
       16

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

7 голосов
/ 06 октября 2011

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

toPeano :: Int -> Nat
toPeano n =

, которая превращает целое число в его число Пеано.

У меня есть данные:

data Nat =
   Zero |
   Succ Nat
   deriving Show

ДляНапример,

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

и т. д.

Я понятия не имею, как заставить его распечатывать числа Пеано с заданным целым числом.Я никогда не работал с числами Пеано, поэтому любая помощь с этим будет принята с благодарностью!

Спасибо!

Ответы [ 2 ]

7 голосов
/ 06 октября 2011

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

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

Результаты печати

Теперь единственное, что вы сказали, было похоже на вопрос:

Я понятия не имею, как заставить его распечатать числа Пеано с заданным целым числом.

Это не имеет ничего общего с числами Пеано, но в GHCi вы можете просто запустить любую из следующих функций:

> fromPeano (toPeano 5)
5

Или вы можете создать программу и использовать print для распечатки результатов:

main = print (toPeano 5829)

и использовать GHC для компиляции программы

$ ghc --make myProg.hs
$ ./myProg
Succ (Succ (Succ (...
1 голос
/ 06 октября 2011

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

toPeano 0 = Zero
toPeano n = Succ $ toPeano (n-1)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...