プログラミングの基礎 第16章 dijkstra_mainの初動プログラム

大変だったけど粘ってよかった。。

let eki_xs = make_eki_list global_ekimei_list
(* dijkstra_main : eki_t list -> ekikan_t list -> eki_t list *)
let dijkstra_main eki_xs ekikan_xs = 
  let rec recursion xs = 
    match xs with [] -> []
    (* 母集団の中から探すので、eki_xsとekikan_xwは再帰から分離する *)
    | y::ys  -> let tuple = saitan_wo_bunri (koushin y eki_xs ekikan_xs) 
    (* タプルが両方とも空だとつながりのある駅もなし、逆もなし->異常扱い  *)
    in match tuple with ([], []) -> []
    | ([], _) -> recursion ys (*つながりが無い駅は除外する *)
    | (z::zs, _)  -> z::recursion ys  
in recursion eki_xs

プログラミングの基礎 ((Computer Science Library))

プログラミングの基礎 ((Computer Science Library))