在python中有什么像*或**的clojure?

时间:2014-04-13 03:36:51

标签: clojure

我有一个向量,想要在Clojure中调用一个函数。该函数接受许多参数,我有矢量。

例如:

 (defn f [a b] (+ a b))

我有矢量:

  [1 2]

我可以使用申请:

  (apply f [1 2])

但我可以像在python中一样在Clojure中调用f吗?

  (f *[1 2]) .

我的用例是我需要dissoc来自地图的一些键。我想拨打(dissoc amap *keys),但不支持。

我可以使用apply

(apply dissoc (cons amap keys))

但不太方便。

在Clojure中最好的方法是什么?

1 个答案:

答案 0 :(得分:6)

正如其他人注意到的那样,apply是Python的arbitrary argument lists完全等价物。在您的用例中,给出

(def a-map {1 2, 3 4, 5 6})
(def some-keys (range 5))
dissoc

some-keys a-map

(apply dissoc a-map some-keys)
; {5 6}

我的原始解决方案也有效

(reduce dissoc a-map some-keys)
; {5 6}

但仅仅因为dissoc可以一次获取一个关键参数,或者同时获取所有关键参数。