Для дальнейшего ответа Ли, вы также можете использовать функцию every?
, чтобы сделать вашу функцию более общей:
(defn every-pos? [& values]
(every? pos? values))
Эта функция имеет то преимущество, что вам не нужно указывать оценку каждого аргумента, и она принимает неограниченное количество параметров:
=> (every-pos? 1 7)
true
=> (every-pos? 3 -1 13 2)
false
Обучение метапрограмме с последовательностями, а не отдельными значениями, действительно демонстрирует сильные стороны функционального программирования.
Чтобы проверить значение и включить побочные эффекты, нужно выполнить что-то вроде следующего:
(defn check-positive-numbers [x y]
(let [pos-values? (every-pos? x y)
msg (if pos-values?
"all numbers positive"
"one or more numbers non-positive")]
(println msg)
pos-values?))