2016-02-26 2 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.

Для справки, я знаю, что могу использовать condp с type и проверять их на наличие значений типа. Я просто хочу знать, существует ли этот макрос.

ответ

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)) 
Смежные вопросы