【发布时间】:2017-03-20 12:22:50
【问题描述】:
我目前正在 Clojure 中开发路线规划机器人。机器人接收一个包裹,其中包含一组停靠点,然后这个机器人被传递给一个计算最短路线的函数。
(defn journey [start end]
(alg/pprint-path (alg/shortest-path all-edges {:start-node start, :end-node end, :cost-attr :weight})))
(defn fullpath [& stops]
(doall (map (fn [a b] (journey a b)) stops (rest stops) )))
以上两个函数计算停靠点之间的最短路线并打印出来。
;;passed into robot
(defrecord Parcel [start
end
home])
;;passed into robotroute to plan journey of robot
(defrecord Robot [stops])
;;computes the path
(defn robotroute [robot]
(def stops (:stops robot))
(fullpath stops))
(def task1parcel (Parcel. :main-office :r131 :main-office))
(def task1robot (Robot. task1parcel))
(def task1 (robotroute task1robot))
(task1)
以上是我创建机器人和包裹的代码。 Robotroute 是我传递给机器人的函数,用于去除停靠点并使用完整路径规划路线。
所有的功能都可以定义等等。但是当尝试运行任务 1 时,我得到了以下错误。
ClassCastException clojure.lang.LazySeq cannot be cast to clojure.lang.IFn funcprog2.core/eval13519 (form-init1291893531842170235.clj:1)
谁能帮忙解决这个错误?
另外,我希望机器人能够容纳多个包裹,这样它就可以连续执行多个包裹,那么推进这个的最佳计划是什么?
【问题讨论】:
标签: clojure shortest-path