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
虽然文档证明这是正确的,但第二条边缘没有添加。我做错了什么?
答案 0 :(得分:2)
事实上,(uber/add-edges graph1 [:a :c])
在两个示例中都返回了一个全新的图表,而graph1
保持不变。在第一种情况下,您正在打印结果。在第二种情况下,您实际上是在浪费这个新图表并打印graph1
。使用functional programming
时,这是一种正常行为,适用immutable data
和functions with no side effects
概念。