在python中有什么类似*或**的clojure?

use*_*372 1 clojure

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

例如:

 (defn f [a b] (+ a b))
Run Code Online (Sandbox Code Playgroud)

我有矢量:

  [1 2]
Run Code Online (Sandbox Code Playgroud)

我可以用申请:

  (apply f [1 2])
Run Code Online (Sandbox Code Playgroud)

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

  (f *[1 2]) .
Run Code Online (Sandbox Code Playgroud)

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

我可以用 apply

(apply dissoc (cons amap keys))
Run Code Online (Sandbox Code Playgroud)

但它不太方便.

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

Thu*_*ail 6

正如其他人注意到的那样,apply完全等同于Python的任意参数列表.在你的用例中给出

(def a-map {1 2, 3 4, 5 6})
(def some-keys (range 5))
Run Code Online (Sandbox Code Playgroud)

dissoc some-keysa-map

(apply dissoc a-map some-keys)
; {5 6}
Run Code Online (Sandbox Code Playgroud)

我的原始解决方案也有效

(reduce dissoc a-map some-keys)
; {5 6}
Run Code Online (Sandbox Code Playgroud)

但只是因为dissoc可以一次一个地或一次性地获取其关键参数.

  • 只是`(应用dissoc a-map some-keys)`.它正是`apply`的用途,完美地反映了`*keys`的用法.`reduce`也很好,在`dissoc`(和许多其他情况)的特定情况下,但`apply`是clojure的'*foo`的"版本",这是OP所询问的. (5认同)