我正在尝试遍历多路树,并像 List.map 那样映射它的值。
这是我的尝试
type 'a tree = Node of 'a * ('a tree list);;
let tree_map f t =
let rec aux acc tr =
match tr with
| Node(v, []) -> Node(f v, []) :: acc
| Node(v, sub) -> let r = List.fold_left aux acc sub in Node(f v, r) :: acc
in aux [] t
;;
let t = Node (1, [Node (2, [Node (1, [])]);
Node (3, []);
Node (1, [Node (5, []);
Node (2, [])])]);;
;;
let res = tree_map (succ) t;;
Run Code Online (Sandbox Code Playgroud)
我尝试了这个答案的建议。无法成功实施。
我的函数返回这个显然是不正确的
val res : int tree list =
[Node (2,
[Node (2,
[Node (3, []); Node (6, []); Node (4, []); Node (3, [Node (2, [])])]);
Node (4, []); Node (3, [Node (2, [])])])]
Run Code Online (Sandbox Code Playgroud)
有什么问题 ?
参加聚会有点太晚了,但因为我已经完成了工作并向您展示了可以简化多少功能:
let rec tree_map f (Node (v, sub)) =
Node(f v, List.map (tree_map f) sub)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
235 次 |
| 最近记录: |