У меня есть следующий блок кода:
data G = F G G | H Int deriving (Show, Eq)
example :: Int -> G -> G
example 0 (H i) = (H i)
example n (H i) = F (example (n-1) (H i)) (example (n-1) (H i))
example n (F i1 i2) = F (example n i1) (example n i2)
Когда я запускаю example 0 (F (H 1) (H 2))
, как и ожидалось, он возвращает F (H 1) (H 2)
Когда я запускаю example 1 (F (H 1) (H 2))
, он возвращает F (F (H 1) (H 1)) (F (H 2) (H 2))
Это не то, что я хочу. Мне нужно вернуть F (F (H 1) (H 1)) (H 2)
То, что я имею в виду, находится на 6-й строке, example n (F i1 i2) = F (example n i1) (example n i2)
, я дважды вызываю рекурсивную функцию. Однако я хочу, чтобы (example n i1)
сначала оценил и обновил переменную n
, прежде чем мы оценим (example n i2)
. Любая помощь / решения этой конкретной проблемы будут высоко оценены. Я пытался часами с нулевым успехом.