通过参数的clojure矢量

时间:2011-10-02 23:32:31

标签: clojure

(def andre {:owner "Andre" :type "car" :cur-speed "100" :license-plate "ABC"})
(def blastoise {:owner "Blastoise" :type "truck" :cur-speed "120" :license-plate "XYZ"})
(def car-tax[andre blastoise])
(defn calculate-car-tax [v]
    (for [v] (println (v)))
)

(calculate-car-tax(car-tax))

我遇到了这个例外: java.lang.IllegalArgumentException:for在绑定向量中需要偶数个表单(cartax.cl:5)

在这一行:(对于[v](println(v))) 这个v通过参数

传递

1 个答案:

答案 0 :(得分:2)

您可能需要以下

(def andre {:owner "Andre" :type "car" :cur-speed "100" :license-plate "ABC"})
(def blastoise {:owner "Blastoise" :type "truck" :cur-speed "120" :license-plate "XYZ"})
(def car-tax [andre blastoise])
(defn calculate-car-tax [v]
    (for [element v] (println element))
)

(calculate-car-tax car-tax)

您需要将for宏与绑定结合使用。那就是你想要的东西超出你的向量。 “偶数”的原因是你可以同时测量多个向量!最好的论点最好不保持原样;也就是说,一定要写

(calculate-car-tax car-tax)

而不是

(calculate-car-tax(car-tax))

以下是成绩单:

user=> (def andre {:owner "Andre" :type "car" :cur-speed "100" :license-plate "ABC"})
#'user/andre
user=> (def blastoise {:owner "Blastoise" :type "truck" :cur-speed "120" :license-plate "XYZ"})
#'user/blastoise
user=> (def car-tax [andre blastoise])
#'user/car-tax
user=> (defn calculate-car-tax [v]
    (for [element v] (println element))
)
#'user/calculate-car-tax
user=> (calculate-car-tax car-tax)
({:owner Andre, :type car, :cur-speed 100, :license-plate ABC}
{:owner Blastoise, :type truck, :cur-speed 120, :license-plate XYZ}
nil nil)