我想在3到11的范围内执行loop/recur
:
(loop [itr 3]
(if (and (< itr 11) (= 0 (mod itr 4)))
(println itr)
(recur (inc itr))
))
正如所料,它将返回4
。问题是当我在寻找没有任何匹配的东西时:
(loop [itr 2]
(if (and (< itr 3) (= 0 (mod itr 4)))
(println itr)
(recur (inc itr))
))
这将使REPL崩溃而不返回nil
。有没有办法在这个循环中添加类似else
语句的内容,所以如果没有匹配,它会返回nil
?
答案 0 :(得分:3)
而不是loop
/ recur
,请考虑使用您可以使用的更高级别的功能:
(first (filter #(zero? (mod % 4)) (range 3 11)))
;=> 4
(first (filter #(zero? (mod % 4)) (range 2 3)))
;=> nil