存储为元组列表的图形。元组的第一个元素 - 顶点,第二个元素元组 - 与之连接的顶点。
我要连接的headName-vertex [:t = Srting] **
我要连接的元素 - 顶点 [:t = List] **
A可以连接顶点所以[(1,[2]),(2,[])],但我想连接所以[(1,[2]),(2,[1])] 。有点做,但不起作用。怎么了?请帮忙。
connect_command graph headName []=(graph,"You didnt enter elements to connect!\n")
connect_command graph headName elements=
if (has_element graph headName) then ((update_connect graph graph headName elements []),"Element "++headName++" connected with "++listToString (checked_elements graph headName elements []) []++"\n")
else (graph,"Element with "++headName++" name not found!")
update_connect _ [] _ _ result=result
update_connect mainGraph (item:graph) headName (i:elements) result=
if ((fst item)==headName) then (update_connect mainGraph graph headName elements (result++[((fst item),(checked_elements mainGraph headName elements []))]))
else if ((fst item)==i) then (update_connect mainGraph graph headName (i:elements) (result++[((fst item),[headName])]))
else (update_connect mainGraph graph headName elements (result++[item]))
checked_elements _ _ [] result=result
checked_elements graph headName (item:elements) result=
if (has_element graph item)&& (item /=headName)then checked_elements graph headName elements (result++[item])
else (checked_elements graph headName elements result)
我要连接的headName-vertex * [:t = Srting] *
我要连接的元素 - 顶点* [:t = List] *
答案 0 :(得分:1)
“不起作用”有点模糊。
您似乎试图将键/值元组列表用作字典。标准库已经提供了真正的字典,因此您不必亲自手动实现has_element
之类的功能。请查看Data.Map
。
实际上,标准库已经有Data.Graph
,这可能已经满足您的需求。 (取决于您是否确实需要图表,或者您是否将其作为学习Haskell的方式编写。)
无论如何,定义一些自定义数据类型而不是将所有内容都列为列表,元组和字符串可能会帮助您大大缩小出错的范围。 (这当然可以帮助我们弄清楚应该在这里发生什么......)