【问题标题】:How to define listTree so that it returns a list containing all the elements in order?如何定义 listTree 以便它返回一个包含所有元素的列表?
【发布时间】:2021-11-06 03:18:11
【问题描述】:
listTree :: Tree a -> [a]
listTree = foldTree f z
    where
    f x y z  = x + y + z
    z = []

这是我目前所拥有的,但我的 f 是错误的,因为预期的类型是 Tree a -> [a],但实际的类型是 Tree [a] -> [a]

data Tree a
   = Tip
   | Bin (Tree a) a (Tree a)
   deriving (Show, Eq)

foldTree :: (b -> a -> b -> b) -> b -> Tree a -> b
foldTree f z Tip         = z
foldTree f z (Bin l x r) = f (foldTree f z l) x (foldTree f z r)

这是树的折叠和数据类型。

在定义f 时需要帮助。

【问题讨论】:

    标签: haskell tree fold


    【解决方案1】:

    首先,组合列表在haskell中使用+++ 仅用于添加数字。其次,变量y的类型是a,而不是[a],所以不能直接使用++

    listTree :: Tree a -> [a]
    listTree = foldTree f z
        where
        f x y z = x ++ [y] ++ z
        z = []
    

    【讨论】:

      猜你喜欢
      • 2014-06-17
      • 1970-01-01
      • 1970-01-01
      • 2018-04-19
      • 2016-07-16
      • 1970-01-01
      • 2022-10-14
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多