0

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

我要连接的headName-vertex [:t=Srting]**

我要连接的元素-vertises [: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-我要连接的顶点*[:t=Srting]*

我要连接的元素-vertises*[:t=List]*

4

1 回答 1

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

  2. 您似乎正在尝试将键/值元组列表用作字典。标准库已经提供了一个真正的字典,因此您不必像has_element自己那样手动实现功能。看Data.Map

  3. 实际上,标准库已经有了Data.Graph,它可能已经做了你需要的。(取决于您是否真的需要图表,或者您是否将其编写为学习 Haskell 的一种方式。)

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

于 2013-07-31T17:30:40.550 回答