Ошибка указывает, что вы не создали конструктор данных Node
. Возможно, вы создали конструктор данных Tree
, например:
data Tree a = Null | <s>Tree</s> a (Tree a) (Tree a)
с использованием Tree
в качестве конструктора данных не является неправильным . Но вам нужно решить, каким будет имя, и использовать этот конструктор данных.
В любом случае вам не нужно определять функцию для подсчета количества элементов самостоятельно. Вы можете позволить Haskell сделать его экземпляром Foldable
, а затем использовать length :: Foldable f => f a -> Int
:
{-# LANGUAGE DeriveFoldable #-}
data Tree a = Null | Node a (Tree a) (Tree a) deriving (<b>Foldable</b>, Show)
Если мы, например, определим пример дерева, как @AndyG написал , мы можем вычислить число Node
s как:
Prelude> length (Node 0 (Node 1 Null Null) (Node 2 Null Null))
3
Если вы сами реализуете длину, вы должны сделать рекурсивный вызовите поддеревья, так как вы не можете сложить поддеревья:
numberOfNodes :: Tree -> Int
numberOfNodes Null = 0
numberOfNodes (Node _ st1 st2) = <b>1 + numberOfNodes st1 + numberOfNodes st2</b>