我有一个值要传递给两个函数。我希望在Clojure中有一个干净的方法来做到这一点。
例如,我有一个离散的概率分布,表示为散列图。假设我想将它传递给mean
和stdev
函数(即我的自定义均值和标准差函数)。
目前这就是我所拥有的:
[(mean dist) (stdev dist)]
另一种方式 - 不是真正的改进 - 将是:
((fn [x] [(mean x) (stdev x)]) dist)
我想更紧凑地做这件事。怎么样?
答案 0 :(得分:4)
使用juxt
:
((juxt mean stdev) dist)
; [82.03M 3.41M]
核心功能的简单示例:
((juxt inc dec) 2)
; [3 1]
评论:在这种情况下,关键优势并不是真正紧凑,而是与两种功能并置的表现力。
现在我知道juxt
是关键,我可以找到相关问题,例如"Is there a reverse-map?"。也就是说,根据我当时(10分钟前)的知识,其他人不容易被发现,所以我希望这个答案可以帮助人们发现这个有时候方便的功能。