#haskell #tree #fold
Вопрос:
listTree :: Tree a -gt; [a] listTree = foldTree f z where f x y z = x y z z = []
Это то, что у меня есть до сих пор, но мой f неверен, потому что ожидаемый тип Tree a -gt; [a]
, но фактический Tree [a] -gt; [a]
data Tree a = Tip | Bin (Tree a) a (Tree a) deriving (Show, Eq) foldTree :: (b -gt; a -gt; b -gt; b) -gt; b -gt; Tree a -gt; b foldTree f z Tip = z foldTree f z (Bin l x r) = f (foldTree f z l) x (foldTree f z r)
Это складка и тип данных для дерева.
Нужна помощь с определением f
.
Ответ №1:
Прежде всего, объединение списков используется
в haskell.
используется только для сложения чисел. Во-вторых, переменная y
имеет тип a
not [a]
, поэтому вы не можете использовать
ее напрямую.
listTree :: Tree a -gt; [a] listTree = foldTree f z where f x y z = x [y] z z = []