我目前正致力于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)
非常感谢任何帮助。
答案 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) ))