我可以轻松地为有向图中的节点定义数据类型。
data Node = Node String [Node] derving (Show, Read)
我可以使用show函数将图形保存到文件中,然后使用read函数恢复它。但是,如果有一个循环,show函数将无法处理。是否有一种简单的方法来保存和恢复一个图形?
我可以轻松地为有向图中的节点定义数据类型。
data Node = Node String [Node] derving (Show, Read)
我可以使用show函数将图形保存到文件中,然后使用read函数恢复它。但是,如果有一个循环,show函数将无法处理。是否有一种简单的方法来保存和恢复一个图形?
import qualified Data.Map as M
data Node = Node String [Node]
instance Show Node where
show (Node name others) = "Node " ++ show name ++
" " ++ show (map nodeName others)
where nodeName (Node n _) = n
restoreGraph :: [(String, [String])] -> M.Map String Node
restoreGraph pairs = table
where
table = M.fromList $ map makeNode pairs
makeNode (name, others) = (name, Node name $ map findNode others)
findNode str = fromJust $ M.lookup str table