2009-07-30 5 views
3

テキストの正規化関数のリストを保持したいと思います。 .toLowercaseを保存するにはどうすればいいですか? 私はこのような何かを考えていた:JavaメソッドをClojureのリストに保存するには

(def normalizing-functions (list remove-punctuations .toLowerCase)) 

答えて

3

それは定期的に何かに適用するためには、関数のリストを作るように見えます。 javaメソッドは、実際には のように、マップ関数にフィードする場合と同じように簡単にラップすることができますが、この意味ではかなりのクロージャー関数ではありません。

 
#(. tolowercase %) 
+0

それがうまくいった!これらの操作に関する文書はありますか?ありがとう。 – unj2

+3

これはanomymous関数で、ラムダとも呼ばれます。 #(。toLowerCase%))は、(fn [x](.toLowerCase x))を省略したリーダマクロです。 – alanlcode

1

よりもむしろあなたには、いくつかの方法で、後に解凍する必要がありますリストでそれらを保つこと、それだけでClojureの機能(編集:私のか、アーサーの構文を使用して)で.toLowerCaseをラップする方が簡単かもしれし、それを構成しますあなたが計画している機能はcompを使用してデータを正規化するために使用します

user=> (defn remove-punctuation [st] ...removing puncutation mechanics...) 

user=> (defn lower-case [st] 
     (.toLowerCase st)) 

user=> ((comp remove-punctuation lower-case) "HELLO THERE!") 
"hello there" 

user=> (defn normalize-data [data] 
     ((comp remove-punctuation lower-case) data)) 
+0

ありがとうございますが、私はすべての機能のためにそれを行うことはできません。とにかく素敵なハックです。 – unj2

1

memfnマクロは、より読みやすい方法でこれを行います。

(def f (memfn toLowerCase)) 
(f "Hello") 

は「hello」を返します。 (doc memfn)に詳細があります。

関連する問題