n-tree tree Ocaml的深度

By simon at 2018-02-28 • 0人收藏 • 66人看过

我不得不使用函数来计算ocaml中n-ary树的深度 范例没有使用外部自制功能上。这是结构:

type nTree = 
  Id of int
  | Leaf of string
  | Tree of string * string * nTree list
这是我的结果:
  let rec height t = match t with
     | Id _ -> 0
     | Leaf _ -> 0
     | Tree(_,_,n) -> if n = [] then 1
                      else let e::r = n in max 
                      (List.fold_left (fun acc x -> acc + height x) 1 [e])
                      (List.fold_left (fun acc x -> acc + height x) 1 r)
它的工作,但我觉得它非常丑,e :: r位导致一个因为警告 不匹配[]模式。有没有办法让这个警告是免费的 “漂亮”? 谢谢!

2 个回复 | 最后更新于 2018-02-28
2018-02-28   #1

e::r位由于不匹配而导致警告 []模式 你只需要使用模式匹配

  let rec height = function
     | Id _ -> 0
     | Leaf _ -> 0
     | Tree(_,_,n) -> 1 + List.fold_left max 0 (List.map height n)
2:
match n with
  | [] -> 1
  | e::r -> …
但实际上,根本没有区分这些。你应该 干
  let rec height = function
     | Id _ -> 0
     | Leaf _ -> 0
     | Tree(_,_,n) -> 1 + List.fold_left max 0 (List.map height n)

2018-02-28   #2

e::r位由于不匹配而导致警告 []模式 你只需要使用模式匹配

  let rec height = function
     | Id _ -> 0
     | Leaf _ -> 0
     | Tree(_,_,n) -> 1 + List.fold_left max 0 (List.map height n)
2:
match n with
  | [] -> 1
  | e::r -> …
但实际上,根本没有区分这些。你应该 干
  let rec height = function
     | Id _ -> 0
     | Leaf _ -> 0
     | Tree(_,_,n) -> 1 + List.fold_left max 0 (List.map height n)

登录后方可回帖

Loading...