【问题标题】:Connect vertices of the graph in Haskell在 Haskell 中连接图的顶点
【发布时间】:2013-07-31 17:07:38
【问题描述】:

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

headName-我要连接的顶点[: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]*

【问题讨论】:

    标签: haskell graph


    【解决方案1】:
    1. “不起作用”有点含糊。

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

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

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

    【讨论】:

    • @Kochev 在这种情况下,您可以忽略上面的第 3 点。我只是提供它以防你有其他目的。
    猜你喜欢
    • 2017-08-19
    • 2018-07-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-02-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多