我有一个包含两个元素的树。由以下数据结构定义:
type ('a,' b) tree =
empty
| node of 'a * (' a, 'b) tree sheet;;
| node of 'b * (' a, 'b) tree sheet;;
现在我必须编写一个函数split:('a,'b)tree - > 'sheet *'b列表,它覆盖第一个列表中的所有元素节点a和第二个列表中的所有元素节点b。
答案 0 :(得分:1)
您的代码不正确,因此我假设您的树类型为:
type ('a, 'b) tree =
| Empty
| AlphaNode of 'a * ('a, 'b) tree
| BetaNode of 'b * ('a, 'b) tree
let split tree =
let rec split_ tree a b = match tree with
| Empty -> (a, b)
| AlphaNode (sheet, tree) -> split_ tree (sheet::a) b
| BetaNode (sheet, tree) -> split_ tree a (sheet::b) in
split_ tree [] [];;
split_ func仅用于提高可读性和方便性。没有它,你每次都必须调用两个空列表。