は、私が行くと何:
=> ((fn [a b & _] (+ a b)) 1 2 3)
=> 3
これは、任意の数の引数を取りますが、ちょうど最初の二つを追加無名関数を作成します。 _
シンボルは特別なことをしていません。「このことは気にしませんが、どうにかして縛られる必要があります。あなたはこれをたくさんやってしようとしていると思うなら、あなたはおそらくそれを定義したい:
(defn add-first-two
[a b & _]
(+ a b))
あなたは#()
構文に実際にある場合、あなたはそれのための定義で%&
どこかを含める必要があります任意の数の議論を取るべきであることを「実現する」。表示するときにインデックスを付ける必要があるわけではありませんが、のどこかにが存在する必要があります。ここでは例です:一方
=> (#(do %& (+ %1 %2)) 1 2 3)
=> 3
、このソリューションは、あなたがいずれかを必要としない%&
の処理のいくつかの並べ替えを必要とする、とは遅いものダウンは少し(私はこれについてはよく分からないことがあり、多分誰かが私にこれに関するフィードバックを与えることができます)。むしろ楽しい解決策は、(comment ...)
ブロック内に%&
を貼り付けることです。これはnil
と評価されます。
=> (#(do (comment %&) (+ %1 %2)) 1 2 3)
=> 3
さらに多くのエキゾチックなソリューションは、あなたは、単にそこに何も入力されたなかったかのように読者が実際に、評価から削除することを除いて、多く(comment...)
のようである、#_...
を使用することです。この方法では、コードを短縮するために(+ ...)
の本体の内側に貼り付けることができます。
=> (#(+ %1 %2 #_%&) 1 2 3)
=> 3
あなたはそれがうまくいきました。私は実際にこれを試したことはありませんでした、そして、私はそれが動作するのを見てかなり驚いています。明らかに、#_...
セクションが削除される前にいくつかの処理があります。奇妙な。
あなたはこれらの奇妙なコメントソリューションのいずれかを好きではない、とdo
はあなたが常に(if nil ...)
ブロック内に置くことができ、あなたのためにそれをやっていない場合:
=> (#(if nil %& (+ %1 %2)) 1 2 3)
=> 3
まあ、すべてのその後((fn ...)
を使用して)最初の解決策が最も好きですが、これらのいくつかは確かにです。です。
これはすべての引数の合計です。 OPは最初の2つの合計を求めましたが、エクストラは無視されていましたので、(fn [&args](apply +(2 args)) – Alex
と言わなければなりません。 – Gert