data Edge v = Edge {source :: v, target :: v}
deriving (Show,Eq,Ord)
data Graph v = Graph {nodes :: Set v, edges :: Set (Edge v)}
deriving Show
instance Arbitrary v => Arbitrary (Edge v) where
arbitrary = do s <- arbitrary
t <- arbitrary
return $ Edge {source = s, target = t}
instance (Ord v, Arbitrary v) => Arbitrary (Graph v) where
arbitrary = aux `suchThat` validGraph
where aux = do lNodes <- arbitrary
lEdges <- arbitrary
return $ Graph {nodes = fromList lNodes, edges = fromList lEdges}
我目前有這個來生成我的圖形。 但是通過在ghci上使用示例,我注意到它或者不會生成邊或者它會生成一個邊。 是否可以控制生成的邊數量? 我該怎麼做?從任意節點列表生成邊線
編輯:圖形被認爲是有效的: 1 - 邊緣的源節點和目標節點存在。 2-A節點不能成爲多個Edge的源。
它可能真的很難(可以說它非常幸運*)像這樣生成一個'validGraph'(特別是當有更多的邊時) - 生成節點然後從這些節點中繪製成對的節點來生成邊緣可能會更好 – Carsten
事情是那些對需要任意生成。我如何告訴哈斯克爾形成隨機對? – ohiohai