我正在尝试修改使用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
答案 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
的新图形(当然,修改了相应的一个)和边缘。