2016-08-08 2 views
-2

'xDotGraph'(G.DotGraph)のノード、エッジ、プロパティにアクセスして、それらを再度設定したいと思います。ここではgraphvizのを使用して、ドット形式のグラフを印刷しHaskellのコードは次のとおりです。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

あなたが試したものを記載してくださいこれまでのところ、あなたのために働いていないもの。今のところ座っているように、あなたの質問は「私は仕事をしたくありません。一種の質問。 – jkeuhlen

+0

@jkeuhlen、私はこのタイプのグラフを取り、ノードとエッジを返す関数を探しています。 ab = graphNodes xDotGraph let ab1 = graphEdges xDotGraph – David

+0

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

答えて

1

これは、(あなたのコードとほとんど同一であるが、いくつかの変更があります)私の作品:

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

非常に感謝エリック、作品.. :) – David

+0

答えを受け入れるのはどうですか? – ErikR

関連する問題