如何在fgl包中修改节点标签?

时间:2014-03-04 10:45:40

标签: haskell graph nodes

我正在尝试修改使用fgl Haskell包构建的图中现有节点的节点标签,但我无法理解如何做到这一点。我尝试使用insNode重新插入具有相同内部节点ID和新标签的新节点,但在执行此操作时我只获得Node Exception

MWE:

import Data.Graph.Inductive
import Data.Graph.Inductive.Example

main =
  do let test = insNode (1, 'b') a
     putStrLn $ show a
     putStrLn $ show test

2 个答案:

答案 0 :(得分:2)

这个更优雅高效:

updateLabel g n updateFun = case match n g of
      (Just (p, _, l, s), cg) -> (p, n, updateFun l, s) & cg
      (Nothing,            _) -> error "not existent node!?"

或者,如果您不确定g - 图表 - 是否包含n - 节点,请使用:

updateLabel g n updateFun = case match n g of
      (Just (p, _, l, s), cg) -> Just $ (p, n, updateFun l, s) & cg
      (Nothing,            _) -> Nothing

答案 1 :(得分:1)

我想出了如何做到这一点:你只需要使用相同的节点列表创建一个mkGraph的新图形(当然,修改了相应的一个)和边缘。