在Haskell中连接图的顶点

时间:2013-07-31 17:07:39

标签: haskell graph

存储为元组列表的图形。元组的第一个元素 - 顶点,第二个元素元组 - 与之连接的顶点。

我要连接的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] *

1 个答案:

答案 0 :(得分:1)

  1. “不起作用”有点模糊。

  2. 您似乎试图将键/值元组列表用作字典。标准库已经提供了真正的字典,因此您不必亲自手动实现has_element之类的功能。请查看Data.Map

  3. 实际上,标准库已经有Data.Graph,这可能已经满足您的需求。 (取决于您是否确实需要图表,或者您是否将其作为学习Haskell的方式编写。)

  4. 无论如何,定义一些自定义数据类型而不是将所有内容都列为列表,元组和字符串可能会帮助您大大缩小出错的范围。 (这当然可以帮助我们弄清楚应该在这里发生什么......)