2016-02-26 74 views
2

試圖找到比cond更適合的宏來執行謂詞函數的匹配。與cond匹配類型

目前,我在做這樣的事情:

(cond 
    (map? x)  (do-map-code x) 
    (sequential? x) (do-seq-code x) 
    (keyword? x) (do-kw-code x) 
    :else    (do-generic-code x)) 

在一個理想的世界,我想數據應用爲每個的左手條件的第一個參數,讓我改爲寫這個。

(cond x 
    map?  (do-map-code x) 
    sequential? (do-seq-code x) 
    keyword? (do-kw-code x) 
    :else  (do-generic-code x)) 

有點像一個向後condp

作爲參考,我知道我可以使用condptype並檢查類型值。我只想知道這個宏是否存在。

回答

5

您可以使用condp做到這一點:

(condp #(%1 %2) x 
    map?  (do-map-code x) 
    sequential? (do-seq-code x) 
    keyword? (do-kw-code x) 
    (do-generic-code x))