Оценка Haskell - PullRequest
       5

Оценка Haskell

1 голос
/ 02 декабря 2019

У меня есть следующий блок кода:

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)

. Любая помощь / решения этой конкретной проблемы будут высоко оценены. Я пытался часами с нулевым успехом.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...