テキストの正規化関数のリストを保持したいと思います。 .toLowercaseを保存するにはどうすればいいですか? 私はこのような何かを考えていた:JavaメソッドをClojureのリストに保存するには
(def normalizing-functions (list remove-punctuations .toLowerCase))
テキストの正規化関数のリストを保持したいと思います。 .toLowercaseを保存するにはどうすればいいですか? 私はこのような何かを考えていた:JavaメソッドをClojureのリストに保存するには
(def normalizing-functions (list remove-punctuations .toLowerCase))
それは定期的に何かに適用するためには、関数のリストを作るように見えます。 javaメソッドは、実際には のように、マップ関数にフィードする場合と同じように簡単にラップすることができますが、この意味ではかなりのクロージャー関数ではありません。
#(. tolowercase %)
よりもむしろあなたには、いくつかの方法で、後に解凍する必要がありますリストでそれらを保つこと、それだけで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))
ありがとうございますが、私はすべての機能のためにそれを行うことはできません。とにかく素敵なハックです。 – unj2
memfn
マクロは、より読みやすい方法でこれを行います。
(def f (memfn toLowerCase))
(f "Hello")
は「hello」を返します。 (doc memfn)
に詳細があります。
それがうまくいった!これらの操作に関する文書はありますか?ありがとう。 – unj2
これはanomymous関数で、ラムダとも呼ばれます。 #(。toLowerCase%))は、(fn [x](.toLowerCase x))を省略したリーダマクロです。 – alanlcode