2009-07-30 2 views

Répondre

3

Il semble que votre faire une liste des fonctions à appliquer à quelque chose sur une base régulière. La méthode java n'est pas vraiment une fonction de clojure dans ce sens, mais il est facile de l'emballer comme vous le feriez si vous alliez le faire pour la fonction de carte.

 
#(. tolowercase %) 
+0

Cela a fonctionné! Y a-t-il une documentation pour ces opérations? Merci. – unj2

+3

Il s'agit d'une fonction anomymous, parfois appelée un lambda. # (. ToLowerCase%)) est une macro de lecteur qui est un raccourci pour (fn [x] (.toLowerCase x)). – alanlcode

1

plutôt que de les garder dans une liste que vous devrez déballer quelque sorte plus tard, il peut être plus facile d'envelopper .toLowerCase dans une fonction clojure (edit: en utilisant mon ou la syntaxe d'Arthur) et composer avec les fonctions que vous prévoyez d'utiliser pour normaliser vos données en utilisant 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

Merci, mais je ne peux pas le faire pour toutes mes fonctions. C'est un bon hack de toute façon. – unj2

1

La memfn macro fera cela d'une manière plus lisible.

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

retournerait "bonjour". (doc memfn) a les détails.