与cond匹配类型

问题描述:

试图找到比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并检查类型值。我只想知道这个宏是否存在。

您可以使用condp做到这一点:

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