我正在尝试编写一个遍历二叉树并返回遇到的整数列表的函数。 我的数据树声明如下:
data Tree = Node Int Tree Tree | Leaf Int
deriving (Eq,Show)
我的第一个想法是启动该功能:
preorder :: Tree -> [a] --take in tree, return list of ints
但是我看到有些人通过使用类似于:
的函数声明格式在线解决这个问题preorder :: (a -> c) -> (b -> c) -> Tree -> [c]
我真的不明白这条线在做什么,是否需要多次输入?
由于
答案 0 :(得分:3)
它将取决于树的基础定义。他们可能正在使用另一个树定义,常见的是:
data Tree a b = Leaf b | Branch a (Tree a b) (Tree a b)
因此,他们可能需要获取将a
和b
类型的值映射到类型c
的函数。由于您的树定义只包含Int
类型的元素,因此preorder
函数的类型为Tree -> [Int]
就足够了。
<强>更新强>
如果要在树的元素类型中对树进行泛化,可以声明此数据类型:
data Tree a = Leaf a | Node a (Tree a) (Tree a)
使用此定义,您可以按如下方式定义preorder
函数的类型:
preorder :: Tree a -> [a]