簡體   English   中英

Clojure循環/重復出現在一定范圍內

[英]clojure loop/recur in a range

我想在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語句之類的else ,因此,如果沒有匹配項,則返回nil

可以考慮使用更高級別的函數來代替loop / recur

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM