假設有必要檢查參數是否通過給定謂詞集合的一個真值測試。謂詞集合的短路真值測試
codewise:
(fn [x]
(or (pred1 x) (pred2 x) (pred3 x) (pred4 x)))
由於or
的實施中,第一truthy值之後這個短路。如預期。
這又如何通過使用謂詞的集合被改寫:
[PRED1 PRED2 pred3 pred4]
一個時髦的辦法是:
(fn [x preds]
(some? ;; nil->false
(some true? (map #(% x) preds))))
這也證明,這一個不短路。可能是由於Clojure對懶惰序列的分塊。
我們可以做得更好嗎?
更好'比使用顯式的遞歸recur'。 – Thumbnail