如何在Clojure中的列表中存储Java方法
我想为文本保留一个规范化函数列表。我如何存储。toLowercase? 我在想这样的事情:如何在Clojure中的列表中存储Java方法,clojure,Clojure,我想为文本保留一个规范化函数列表。我如何存储。toLowercase? 我在想这样的事情: (def normalizing-functions (list remove-punctuations .toLowerCase)) 这看起来像是你在做一个定期应用于某个东西的函数列表。从这个意义上讲,java方法不是clojure函数,尽管它确实是 很容易将其包装起来,就像您将其馈送到map函数的位置一样 #(. tolowercase %) #(.tolowercase%) 与其将它们保存在一个列
(def normalizing-functions (list remove-punctuations .toLowerCase))
这看起来像是你在做一个定期应用于某个东西的函数列表。从这个意义上讲,java方法不是clojure函数,尽管它确实是 很容易将其包装起来,就像您将其馈送到map函数的位置一样 #(. tolowercase %) #(.tolowercase%)
与其将它们保存在一个列表中,您以后必须以某种方式进行解包,不如将
.toLowerCase
包装在clojure函数中(编辑:使用my或Arthur的语法),并将其与您计划使用的函数组合,以便使用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))
memfn
宏将以更可读的方式执行此操作
(def f (memfn toLowerCase))
(f "Hello")
我会回“你好”<代码>(docmemfn)有详细信息。有效!是否有这些操作的文档?谢谢。这是一个匿名函数,有时也称为lambda#(.toLowerCase%))是一个reader宏,是(fn[x](.toLowerCase x))的简写。谢谢,但我不能为所有函数都这样做。不管怎么说,这是一个很好的技巧。