我正在研究路线规划机器人。机器人使用ubergraph遍历办公室的房间,可以收集和交付包裹。然而,当我想要计划一条路线然后输出一个包裹已被交付的事实时,已经交付了#34; Delivered"消息在路由计划之前输出。
我知道为什么会发生这种情况,这是因为我的if语句中的顺序等等。但是,我已经尝试过每个我能想到的位置来打印,我无法得到它工作
任何人都可以看到我需要将以下代码行移动到哪里?
(journey start end)
下面是如果函数的完整代码包含在。
中(defn multipleparcels [parcel]
(def newparcel (first parcel))
(def start (:start newparcel))
(def end (:end newparcel))
(def delivery (:delivery newparcel))
(if (empty? parcel)
(println "Deliveries Completed")
(if (= delivery "Delivery")
(println "Parcel Delivered")
(println "Parcel Collected")))
(journey start end)
(multipleparcels (rest parcel)))
任何提示都非常感谢。
编辑:我现在设法实现的目标
(defn multipleparcels [parcel]
(let [newparcel (first parcel)
start (:start newparcel)
end (:end newparcel)
delivery (:delivery newparcel)]
(if (empty? parcel)
(println "Deliveries Completed")
(doall (journey start end)
(if delivery
(println "Parcel Delivered")
(println "Parcel Collected"))
(multipleparcels (rest parcel))))))
答案 0 :(得分:1)
journey
显然是一些副作用函数,但它实际上并没有做任何事情,因为你忽略了这个值,因为start
,end
和{ {1}}来自函数的参数。
需要考虑的一些事项:
delivery
在这个功能中。def
是否...这是一个二元条件,所以最好让(= delivery "Delivery")
成为一个简单的布尔值,所以{{1} {{1} }} delivery
,但它在这里没有做任何事情。(if delivery then else)
。journey
并没有真正说明做什么的功能。此外,您的参数multipleparcels
表示当上下文显示它应该接收多个时,它会收到一个宗地。以下是执行某些操作的代码,即使它不是您想要的,也许您可以获得有关如何处理数据的一些想法:
multipleparcels
我建议退一步,做一些基本的clojure练习,这样你就可以理解为一个变量赋值的区别,这是你正在做的和在命令式编程风格中常见的,以及评估表达式。一旦掌握了这一点,就会变得更容易,更有趣!祝你好运!