Clojure和Ubergraph库的新手,所以如果这非常明显,请原谅我。尝试使用 Ubergraph 添加边功能向现有图表添加边缘。以下代码按预期工作:
(def graph1 (uber/graph [:a :b]))
(uber/pprint (uber/add-edges graph1 [:a :c]))
。产生以下内容:
3 Nodes:
:a
:b
:c
2 Edges:
:a <-> :b
:a <-> :c
但是,这:
(def graph1 (uber/graph [:a :b]))
(uber/add-edges graph1 [:a :c])
(uber/pprint graph1)
生产:
2 Nodes:
:a
:b
1 Edges:
:a <-> :b
不会添加第二个边缘,尽管文档表明这是正确的。我做错了什么?
事实上,(uber/add-edges graph1 [:a :c])
在两个示例中都返回一个全新的图形,而graph1
保持不变。在第一种情况下,您正在打印结果。在第二种情况下,您没有这样做,您实际上是在浪费这个新图形并打印graph1
。这是使用functional programming
时的正常行为,它适用于immutable data
和functions with no side effects
概念。