2016-08-08 1 views
-2

Je veux accéder aux nœuds, des arêtes et des propriétés de « xDotGraph » (G.DotGraph) et définir ceux à nouveau. Voici le code Haskell qui imprime graphique format point à l'aide graphviz:Comment accéder aux nœuds bords du graphe de format point (Généralisée) dans 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

S'il vous plaît décrire ce que vous avez essayé jusqu'à présent et ce qui n'a pas fonctionné pour vous. Comme il se trouve maintenant, votre question se lit plus comme un « Je ne veux pas faire un travail, faites cela pour moi. » genre de question. – jkeuhlen

+0

@jkeuhlen, Je cherche une fonction qui prend ce type de graphe et renvoie des noeuds et des arêtes. let ab = graphNodes xDotGraph let ab1 = graphEdges xDotGraph – David

+0

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

Répondre

1

Cela fonctionne pour moi (la plupart du temps identique à votre code, mais il y a quelques changements):

#!/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

très apprécié Erik, travaille .. :) – David

+0

que diriez-vous d'accepter la réponse? – ErikR