для замыкания вектора через параметр - PullRequest
1 голос
/ 03 октября 2011
(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 Ответ

2 голосов
/ 03 октября 2011

Вы, вероятно, хотите следующее

(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)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...