я определить тип дерева как:Haskell: функция leafCount выход взять Tree Int используя кратное удовольствие
data Tree a = Leaf | Node a (Tree a) (Tree a)
deriving (Show, Eq)
Вот складка функция: How to write a function of type a-> b -> b -> b for folding a tree, в основном так же, как то, что я с помощью.
Теперь я хочу написать функцию leafCount :: Tree a -> Integer
, используя сгиб и не более, одну вспомогательную функцию, я думаю, что мне нужно различать лист и узел в другой ситуации, но я борюсь с этим, вот мой код:
leafCount = fold sum (Node a left right)
where
sum left right elem = leafCount left + leafCount right + 1
В этом коде есть много ошибок, которые я не могу понять вообще. Пожалуйста, дайте мне основную идею и код, который может улучшить мой.
Учитывая, что это домашнее задание, я не уверен, что вы должны искать эту помощь из StackOverflow ... Возможно, вы могли бы сформулировать вопрос о конкретной ошибке, которую вы получаете? – Alec
@Alec хорошо, мне сказали, что не в области a, слева и справа. – o1xhack
@ o1xhack один из способов остаться чистым (во время разработки haskell) заключается в том, чтобы добавлять сигнатуры типов ко всем вашим (верхним уровням) функциям, и если что-то не в масштабах - вы можете попытаться добавить его в левой части вашего определение функции. Еще один намек, который я хочу дать - 'sum' - это что-то уже определенное - вы затеняете исходное определение, которое обычно плохое. Включите '-Wall' при компиляции - это сэкономит вам много хлопот в долгосрочной перспективе. – epsilonhalbe