使用ubergraph

时间:2017-03-15 18:18:34

标签: recursion clojure shortest-path

我目前正致力于clojure的路线规划计划。我使用ubergraph创建我的数据结构,然后使用内置最短路径算法的ubergraph。我让它使用2个参数传入,并让它在传递3个参数。

但是,每次我想传递更多参数时,有没有办法编写一个可以接受任意数量参数的递归版本,而不是编写新函数?

(defn journey [start end]
  (alg/pprint-path (alg/shortest-path all-edges {:start-node start, :end-node end, :cost-attr :weight})))



(journey :main-office :r131)

(defn fullpath [start delivery end]
  (journey start delivery)
  (journey delivery end))


(fullpath :main-office :r131 :main-office)
(fullpath :main-office :r119 :main-office)

以上是我目前拥有的正常工作的代码。

是否可以编写一个可以接受以下参数的函数,例如仍然打印出所采用的路径。

(fullpath :main-office :r113 :r115 :main-office)

非常感谢任何帮助。

1 个答案:

答案 0 :(得分:1)

以下内容应该有效

(defn fullpath [& stops]
  (map (fn [a b] (journey a b)) stops (rest stops) )

(fullpath :a :b :c ..)

收集

的结果
(journey :a :b)
(journey :b :c)
...

进入一个集合。由于您的旅程返回值似乎为零,而您只对打印它的副作用感兴趣,您可能想要进行操作,即

(defn fullpath [& stops]
  (doall (map (fn [a b] (journey a b)) stops (rest stops) ))