Как определить дерево списков, чтобы оно возвращало список, содержащий все элементы по порядку?

#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 = []