おはよう!私はScala 2.9.1で不変グラフを作成しようとしています。 Seq[BO]
で私に与えられました。BO
はグラフで1つのノードを表すことができ、BO.attr_bo: Seq[String]
は他のノードへのエッジを表し、文字列名で与えられます。そして、私はあなたがここで可能な実現を見ることができますBO with ResolvedBO
で表される「解決」のグラフを構築する必要があります:class Universe
は(それは、1つを切断することができます)、すべてのグラフを表しScalaの変更不能なグラフのような構造
trait BO {
def name: String
def attr_bo: Seq[String]
}
trait ResolvedBO {
x: BO =>
val uni: Universe
lazy val r_attr_bo: Seq[BO with ResolvedBO] = attr_bo map (uni.m_list_r(_))
}
class S_BO(val name: String, val attr_bo: Seq[String]) extends BO
class Universe(list: Seq[BO]) {
val m_list: Map[String, BO] = list.map(x => (x.name, x))(collection.breakOut)
val m_list_r: Map[String, BO with ResolvedBO] = ...???
}
val x: Uni = new Uni(Seq(new S_BO("a", Seq("b", "c")), new S_BO("b", Seq("a", "c")), new S_BO("c", Seq("a", "b"))))
また 、それが重要だ場合には、Iグラフをサイクルなしで制限することができます。
だから私の主な質問:ノード(trait BO
)以来
- は非常に複雑なオブジェクトにすることができ、いくつかのサブタイプで実現することができ、「解決ノード」を実装するための最良の方法は何である - の直接リンクを持つすなわちノード他のノードに? (
BO with ResolvedBO
)。 - ノードを単独で解決するのが最良の方法(
lazy val r_attr_bo: Seq[BO with ResolvedBO] = attr_bo map (uni.m_list_r(_))
:trait ResolvedBO
)の場合、グラフの参照(val uni: Universe
)をtrait ResolvedBO
に初期化するにはどうすればよいですか? - Scalaのグラフのような構造を使って作業する最善の方法は何ですか?
あなたは
私はこのようなグラフライブラリから非常に基本的な機能しか必要としないので、自分で実装することを検討してください。しかし、scalax-graphを指してくれてありがとう – newf