Filtering Rose Trees
type 'a rtree = Node of 'a * 'a rtree list
Implement the function
val filter_rtree : ('a -> bool) -> 'a rtree -> 'a rtree option
so that filter_rtree f t is the result of filtering out those values
v of t for which f v = false. For a subtree Node (v, ts), if
f v = false then the whole subtree should be removed. In
particular, filter_rtree f (Node (v, ts)) is None if if f v = false.
let example : int rtree = Node ( 1 , [ Node (2, []) ; Node (3, [Node (4, []); Node (5, [])]) ; Node (6, []) ] ) let _ = assert (filter_rtree (fun x -> x <> 3) example = Some (Node (1, [Node (2, []); Node (6, [])]))) let _ = assert (filter_rtree (fun x -> x <> 1) example = None)