与cond匹配的类型

Dan*_*nce 2 clojure

试图找到比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))
Run Code Online (Sandbox Code Playgroud)

在理想的世界中,我想将数据作为每个左手条件的第一个参数,允许我写这个.

(cond x
  map?        (do-map-code x)
  sequential? (do-seq-code x)
  keyword?    (do-kw-code x)
  :else       (do-generic-code x))
Run Code Online (Sandbox Code Playgroud)

有点像倒退condp.

作为参考,我知道我可以使用condptype和检查对类型值.我只是想知道这个宏是否存在.

Lee*_*Lee 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))
Run Code Online (Sandbox Code Playgroud)