首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将defrecord传递到函数clojure

将defrecord传递到函数clojure
EN

Stack Overflow用户
提问于 2017-03-20 12:22:50
回答 2查看 128关注 0票数 1

我目前正在Clojure的一个路径规划机器人上工作。机器人接收一个包裹,其中包含一组停站,然后这个机器人被传递到一个计算最短路径的函数中。

代码语言:javascript
复制
(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) )))

上面的两个函数计算出站点之间的最短路径并打印出来。

代码语言:javascript
复制
;;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)

上面是我创建机器人和包裹的代码。机器人是我传递给机器人的功能,它的目的是去掉停站,并使用全路径规划路线。

所有函数都可以定义,等等。但是,当试图运行任务1时,我会得到以下错误。

代码语言:javascript
复制
ClassCastException clojure.lang.LazySeq cannot be cast to clojure.lang.IFn  funcprog2.core/eval13519 (form-init1291893531842170235.clj:1)

有人能帮忙纠正这个错误吗?

同时,我想要一个机器人拿着多个包裹,这样它就可以连续运送多个包裹,这样最好的计划是什么呢?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2017-03-20 13:35:55

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

函数完全路径返回一个lazyseq。(task1)将再次评估这个延迟,也许您可以通过在repl中添加"task1“来获得结果。

例如,(def list '(1 2 3))列表等于'(1 2 3). (list),最终将得到"ClassCastException clojure.lang.PersistentList不能转换为clojure.lang.IFn“。

另一点是尝试

代码语言:javascript
复制
(defn robotroute [robot]
         (let [stops (:stops robot)] (fullpath stops)))

在clojure中,建议是:在定义函数时使用let而不是def绑定变量,因为def意味着全局的。

票数 1
EN

Stack Overflow用户

发布于 2017-03-20 13:39:29

  1. (def stops在roboroute -那不应该是let吗?
  2. (robotroute task1robot)返回fullpath返回的任何内容,即(doall (map ... --它是一个序列--序列不能调用/不是函数(正如错误提示的那样)。因此,调用它就像调用(task1)失败一样。
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/42903504

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档