Я создал свой собственный тип данных, созданный для натуральных чисел.
data Natural = Zero | Succ Natural
instance Show Natural where
show (Zero) = "0"
show (Succ Zero) = "S 0"
show (Succ n) = "S(" ++ show n ++ ")"
Я пытаюсь создать функцию для взаимодействия с базовыми типами данных (в основном Int), определенными следующим образом:
intToNat:: Int -> Natural
intToNat 0 = Zero
intToNat n = (Succ n) - 1
natToInt:: Natural -> Int
natToInt Zero = 0
natToInt (Succ n) = 1 + natToInt n
Ну, это вообще не работает, дело в том, что я должен сохранить эту функцию как рекурсивную функцию.Я не знаю, была бы полезна функция read
в этом.
UPDATE : способ компиляции кода используется в функции:
intToNat:: Int -> Natural
intToNat 0 = Zero
intToNat n = Succ(Succ Zero) --Obviusly this method return a constant number, in this case: 2.
Так что в этом случае, я думаю, это связано, но я хочу знать, существует ли «рекурсивный» способ определения «цикла» Suc Zero
n-1 раз.
ФИНАЛЬНОЕ обновление: intToNat
определяется следующим образом:
intToNat:: Int -> Natural
intToNat 0 = Zero
intToNat n = Suc(intToNat (n-1))