为什么我无法为现有的Ubergraph图添加边?

时间:2017-07-13 23:38:00

标签: clojure

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

虽然文档证明这是正确的,但第二条边缘没有添加。我做错了什么?

1 个答案:

答案 0 :(得分:2)

事实上,(uber/add-edges graph1 [:a :c])在两个示例中都返回了一个全新的图表,而graph1保持不变。在第一种情况下,您正在打印结果。在第二种情况下,您实际上是在浪费这个新图表并打印graph1。使用functional programming时,这是一种正常行为,适用immutable datafunctions with no side effects概念。