2016-05-04 12 views
0

私はベクトルの中に文字列を入れる関数を構築していました。Clojure無名関数

私も把握することはできません、なぜこの仕事ん:

(mapv (fn [i] [i]) '("hi" "there"))

が、これは動作しません:

(mapv #([%]) '("hi" "there"))

+1

回答は[こちら](http://stackoverflow.com/q/13204993)と[ここ](のhttp://のstackoverflow。 com/q/4921566)。 – glts

答えて

1

#()は、最初の引数として関数を想定しています。あなたも、単に行うことができます。もちろん、

(map #(vector %) (range 5)) 
> ([0] [1] [2] [3] [4]) 

(map vector (range 5)) 
> ([0] [1] [2] [3] [4]) 
2

As glts mentioned、リスト内でその身体を包み込みreader macro匿名関数を、次のように:

あなたは #(vector %)

などを行うことができます

(read-string "#([%])") 
;=> (fn* [p1__20620#] ([p1__20620#])) 

通常、y OUは、その身体ベクトルである匿名関数を記述する必要があり、あなたの質問にやったように、私はちょうどfnマクロを使用してお勧めします。この場合

(mapv (fn [i] [i]) '("hi" "there")) 
;=> [["hi"] ["there"]] 

を、しかし、あなたの(fn [i] [i])は同等ですvector機能を内蔵し、私はあなたが使用することをお勧めしたい、代わりにその:

(mapv vector '("hi" "there")) 
;=> [["hi"] ["there"]] 
関連する問題