プログラミングの基礎 saitanwo_bunriを書き直し

うーむ。先に進まず。どうしよう。どうしてもリストを更新してくと最短の距離を持たない駅が生まれます。。

let saitan_wo_bunri xs = match xs with
[] -> ([], []) 
| first::rest 
   -> let min = List.fold_right 
                (fun k data -> if k.saitan_kyori < data.saitan_kyori then k else data) 
                (List.tl xs) (List.hd xs) 
in ([min], (List.filter (fun x -> x <> min) xs)) 

let test_eki1 = {namae = "代々木上原"; saitan_kyori = infinity; temae_list = []}
let test_eki2 = {namae = "代々木公園"; saitan_kyori = infinity; temae_list = []}
let test_eki3 = {namae = "明治神宮"; saitan_kyori = infinity; temae_list = []}
let test_eki4 = {namae = "乃木坂"; saitan_kyori = infinity; temae_list = []} 
let test_eki5 = {namae = "代々木公園"; saitan_kyori = 0.0; temae_list = ["代々木上原"]} 
let test_saitan_wo_bunri = 
  saitan_wo_bunri [test_eki1;test_eki2;test_eki3;test_eki4;test_eki5] =
    ([test_eki5], [test_eki1;test_eki2;test_eki3;test_eki4]) 
let test_saitan_wo_bunri2 = saitan_wo_bunri [] = ([],[])

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

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