2

2 つの関数に渡したい値が 1 つあります。Clojure でこれを行うクリーンな方法があることを期待しています。

たとえば、ハッシュマップとして表される離散確率分布があります。mean関数と関数の両方に渡したいとしましょうstdev(つまり、カスタムの平均関数と標準偏差関数)。

現在、これは私が持っているものです:

[(mean dist) (stdev dist)]

別の方法-実際には改善ではありません-は次のようになります。

((fn [x] [(mean x) (stdev x)]) dist)

これをもっとコンパクトにしたい。どのように?

4

1 に答える 1

4

使用juxt:

((juxt mean stdev) dist)
; [82.03M 3.41M]

コア関数を使用した簡単な例:

((juxt inc dec) 2)
; [3 1]

コメント: この場合の主な利点は、コンパクトさではなく、2 つの機能を並置することの表現力です。

それが鍵であることがわかったので、 「逆マップはありますか?」juxtなどの関連する質問を見つけることができます。. とはいえ、当時 (10 分前) に知っていた情報に基づいて、これらの他の機能を簡単に見つけることはできなかったので、この回答が人々がこの便利な機能を見つけるのに役立つことを願っています。

于 2013-11-08T02:10:18.000 に答える