Hemos desarrollado una pequeña biblioteca de gráficos para el proyecto apparat. Puedes echarle un vistazo here. No es puramente funcional y no es un gráfico de cremallera, pero hace un buen trabajo para nosotros. También obtienes gráficos mutables e inmutables.
Aquí es un ejemplo sencillo para la creación gráfica:
implicit val factory = DefaultEdge[String](_, _)
val G = Graph(
"Entry" -> "A",
"A" -> "B",
"B" -> "C",
"B" -> "D",
"D" -> "F",
"F" -> "E",
"E" -> "F",
"E" -> "C",
"C" -> "A",
"C" -> "Exit")
G.dotExport to Console.out
Encontrar los CE y subcomponentes
G.sccs foreach println
G.sccs map { _.entry } foreach println
G.sccs filter { _.canSearch } map { _.subcomponents } foreach { _ foreach println }
Traversal
for(x <- G.topsort) println(x)
for(x <- G.dft(y)) println(x)
El inconveniente actual es que la biblioteca se soporta solamente invariante tipos y no característica completa para una biblioteca de gráficos completa.
aunque otra respuesta se acepta, le recomiendo scalax.collection.Graph, ver http://www.assembla.com/spaces/scala-graph/wiki Se mencionó en la otra respuesta, pero ahora es bastante estable ... – Bastl
Voy a cerrar esta pregunta como fuera de tema porque no entiendo por qué nos preguntan para revisar la historia antigua. – Strawberry