Привет всем, поэтому у меня есть это домашнее задание в Haskell, где мы должны работать с типом Nat Data, который дает только Zero
и Succ(n)
для одного. Итак, один - Succ(Zero)
, два - Succ(Succ(Zero))
и так далее. Мы также должны добавить вычитание, чтобы умножить эти типы данных рекурсивно.Использование recursion in haskell
Одна из проблем выглядеть следующим образом
--Add two natural numbers.
--
-- `>>> add one two`
-- Succ (Succ (Succ Zero))
--
-- `>>> add Zero one == one`
-- True
--
-- `>>> add two two == four`
-- True
--
-- `>>> add two three == add three two`
-- True
--
Моя проблема, когда я делаю рекурсию У меня есть базовый случай, но, как я это называю это просто возвращает базовый случай и не особенно пузырь назад вверх.
Любой помощь или объяснения о том, как рекурсии в Haskell с сопоставлением с образцом будет оценен
EDIT: код у меня есть
add :: Nat -> Nat -> Nat
add Zero Zero = Zero
add Zero (Succ i) = Succ(pred i)
add (Succ i) Zero = Succ(pred i)
add (Succ i) (Succ j) = Succ(add i j)
Где ПРЕД другая функция
pred :: Nat -> Nat
pred Zero = Zero
pred (Succ Zero) = Zero
pred (Succ i) = Succ(pred i)
Показать код у вас есть до сих пор. – chepner
Если это только когда-либо дает вам результат базового случая, это звучит так, как будто не базовый случай просто повторяется, не делая ничего с результатом, но вы действительно должны показывать свой код, поэтому мы можем точно сказать. – sepp2k