我目前正在研究路线规划机器人,并且在向doall传递错误数量的参数时遇到错误。
(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))))))
我在以下函数中使用此代码。
(defn robotroute [robot]
(let [parcels (:parcels robot)
numstops (:numStops robot)]
(if (= 1 numstops)
(oneparcel parcels)
(multipleparcels parcels))
(calccost parcels 0)))
然后我使用以下代码来使用这些函数:
(def task3parcel [(Parcel. :main-office :r113 false)
(Parcel. :r113 :r115 true)])
(def task3robot (Robot. task3parcel 2))
(def task3 (robotroute task3robot)
代码贯穿并输出所有正确的信息。但最后我得到以下错误。
CompilerException clojure.lang.ArityException: Wrong number of args (3) passed to: core/doall, compiling:(form-init9046500356350698733.clj:1:12)
错误是阻止我的calccost代码运行。任何人都可以看到这个错误来自哪里?我已经尝试过移动支架等等。但到目前为止我还没有得到任何工作。
任何人都可以看到此错误的来源吗?如果有的话,是否有人有任何解决方法?
编辑:实施建议的答案。
(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 :(得分:3)
由于错误声明您将三个参数传递给doall
而不是预期的参数。这是由于错误的括号。包含if
表达式还包含三个参数,而不是预期的一个或两个参数。如果要将某些副作用作为表达式的一部分执行,请使用do
:
(if (empty? parcel)
(do
(println "Deliveries Completed")
(doall (journey start end)))
(if delivery
(println "Parcel Delivered")
(println "Parcel Collected")))
请注意,您正在放弃(journey start end)