次のコードがあります:
module MakeLink (Key : Map.OrderedType) = struct
module Links = Map.Make (Key)
type 'a t =
{ links : 'a t Links.t;
value : 'a
}
type key_t = Key.t
let make value =
{ links = Links.empty;
value
}
let link linker ~to':linkable ~by:key =
{ linker with links =
Links.add key linkable linker.links
}
(* some functions for reading here *)
end
相互にリンクされた 2 つのリンクを作成する方法は? 私は試した:
let join a ~with':b ~by:key =
let rec a' = link a ~to':b' ~by:key
and b' = link b ~to':a' ~by:(Key.opposite key) in
a'
しかし、それは自分の卵から孵化したニワトリのように見えます. そして私の質問は次のとおりです: (OCaml または他の言語で) 変更可能なデータを使用せずにサイクル (例: 二重リンク リスト) を含むグラフを作成する方法は?