【发布时间】:2016-10-10 22:14:04
【问题描述】:
一些背景知识:我在 Haskell 中有以下类型的 foldT 函数(类似于 foldr,但用于树)。
foldT :: (a -> b -> b -> b) -> b -> Tree a -> b
这个 foldT 只接受 type (a -> b -> b -> b) 作为输入函数。
我正在尝试找到一种方法将我的树转换为列表,但无法找到使我的附加函数采用 (a -> b -> b -> b) 形式的方法。
以下是无效的,因为它不是正确的类型:
append x y z = append x:y:z
任何帮助将不胜感激。
谢谢!
【问题讨论】:
-
虽然
foldT的类型可以做出很好的猜测,但您应该添加树数据类型的定义。 -
您可能想要
toList = foldT (\c l r -> l ++ [c] ++ r) []之类的内容,尽管您没有告诉我们您希望按顺序、预购还是后购的转化列表。 -
第一个参数 做什么 与它的参数?似乎它几乎可以肯定地复制了
foldT本身已经做的一些事情:递归地对子树做它对根所做的事情,并将三者结合起来。