2016-01-24 35 views
0

我想在一个范围内的3〜11做loop/recurClojure的循环/复发范围

(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

回答

3

而不是loop/recur,可以考虑使用在您的处置更高级别的功能:

(first (filter #(zero? (mod % 4)) (range 3 11))) 
;=> 4 
(first (filter #(zero? (mod % 4)) (range 2 3))) 
;=> nil