2016-08-08 64 views
-2

Ich möchte auf die Knoten, Kanten und Eigenschaften von 'xDotGraph' (G.DotGraph) zugreifen und diese erneut festlegen. Hier ist Haskell Code, der Dot-Format Graph mit graphviz druckt:Zugriff auf Knoten Kanten des Punktformats Graph (Generalisiert) in Haskell

$ cat example.dot 
digraph { 
    a [type1="", type2=""]; 
    b [type1="", type2=""]; 
    a -> b [label=""]; 
} 

import Data.GraphViz 
import Data.Text.IO as T 
import qualified Data.Text.Lazy as B 
import qualified Data.Text.Lazy.IO as L 
import qualified Data.GraphViz.Types.Generalised as G 
import Data.GraphViz.Printing 

xDotText <- L.readFile "example.xdot" 
let xDotGraph = parseDotGraph xDotText :: G.DotGraph String 
T.putStrLn $ renderDot $ toDot xDotGraph 
+0

Bitte beschreiben Sie, was Sie versucht haben, so weit und was hat nicht für dich gearbeitet. Wie es jetzt sitzt, liest sich Ihre Frage eher wie ein "Ich will keine Arbeit machen, tu das für mich." Art von Frage. – jkeuhlen

+0

@jkeuhlen, ich bin auf der Suche nach einer Funktion, die diese Art von Graphen verwendet und Knoten und Kanten zurückgibt. Lassen Sie ab = GraphNodes xDotGraph lassen Sie ab1 = graphEdges xDotGraph – David

+0

Ist [__graphNodes__] (https://hackage.haskell.org/package/graphviz-2999.18.1.2/docs/Data-GraphViz-Types.html#v:graphNodes) Arbeit? – ErikR

Antwort

1

Dies funktioniert für mich (meist identisch mit Ihrem Code aber es gibt ein paar Änderungen):

#!/usr/bin/env stack 
{- stack runghc --resolver lts-6.0 --package graphviz 
-} 
import Data.GraphViz 
import Data.Text.IO as T 
import qualified Data.Text.Lazy as B 
import qualified Data.Text.Lazy.IO as L 
import qualified Data.GraphViz.Types.Generalised as G 
import Data.GraphViz.Printing 
import Data.GraphViz.Types 

main = do 
    xDotText <- L.readFile "example.dot" 
    let xDotGraph = parseDotGraph xDotText :: G.DotGraph String 
    L.putStrLn $ renderDot $ toDot xDotGraph 
    print $ graphNodes xDotGraph 
    print $ graphEdges xDotGraph 
+0

sehr geschätzt Erik, funktioniert .. :) – David

+0

Wie wäre es mit der Annahme der Antwort? – ErikR