2016-01-24 32 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