2013-07-17 14 views
7

私はいくつかの値を持つ要素のリストを持っています。2つの引数関数をリストにマップする方法は?

これを関数にマップして、この2つの引数関数を最初のリストの連続する値に適用して計算した値を含むリストを生成します。

このリストの要素数は1つ少なくなります。

マッピング関数は、一度に2つの引数を取る必要があります。シンプルさは、それが2つの数の平均値を算出した関数であると仮定することができますのためのように、私が使用しています

EDIT

2つの引数関数は、非常に複雑です。

リストがある場合:[3 8 11 14 19 20 88]

は私のために2が(average 3 8)ため(average 8 11)ため5.5

9.5

(average 11 14)がそうで12.5

とを与える与える与える私のaverage機能をマップする関数を記述することができ、それです。 ..

atのリストの平均値を2つ連続して適用すると私は私に与えるべきです。

[5.5 9.5 12.5 16.5 19.5 54.0] 

結果として。

マップは、単一の引数関数をリスト全体に適用し、まったく同じ数の要素を持つ新しいリストを生成します。

私が欲しいのは、一度に2つの引数をとり、関数をそれに適用し、その結果を新しいリストに追加するという2つの引数をとる関数を適用する方法です。

+0

あなたには、いくつかの簡単な例を追加することはできますか? –

+0

reduce(http://clojure.github.io/clojure/clojure.core-api.html#clojure.core/reduce)を意味しますか? –

答えて

11

あなたはマップでそれを行うことができます。

(map f coll (rest coll)) 
+0

これは機能します!どのように地図には2つ以上の議論が必要ですか?この場合、マッピングはどのように機能しますか? それは渡された各リストから1つの引数を選んでいますか?リストの1つが終了するまで ? –

+0

'それで、渡された各リストから1つの引数を選びますか?リストの1つが終わるまで? ' - はい、そうです。渡されたfnは、 'map'に渡されたseqsの数だけ引数を取らなければなりません。 – Alex

+0

@AmoghTalpallikarでは、[Clojure docs](http:// clojuredocs)の 'map'やその他の関数の詳細を読むことができます。org/clojure_core/clojure.core/map)を参照してください。 –

7
(fn [f coll] (map #(apply f %1) (partition 2 1 coll)) 

すぐに4clojureに今すぐ移動してください!

+5

素晴らしい! btw '#(apply f%1)'を '(partial apply f)'に変更することができます。 – mishadoff

+0

4clojure!うわー!これは素晴らしい場所のようです。 –

+0

または '#(reduce f%) ' – film42

関連する問題