I'm working on 4clojure problem 29 : "Get the Caps"
(= (__ "HeLlO, WoRlD!") "HLOWRD")
I've written a solution in the REPL:
user=> (apply str (filter (fn [foo] (some #(= % foo)
(map char (range 65 91)))) "AbC"))
"AC"
But as you can see my parameter "AbC" is nested two parentheses in. How would I move my parameter to the outside so I can use it in the 4clojure test? Have I approached the problem in the wrong way?
You don't need to move the a parameter to the outside, you can just use the same technique you used to create the filtering function, that is, with fn
:
(fn [string]
(apply str
(filter
(fn [foo] (some #(= % foo) (map char (range 65 91))))
string)))
As an example of this, the following two statements are the same:
(+ 1 2 3)
((fn [n] (+ 1 2 n)) 3)
However, to actually answer your question, you could use comp
("compose") and partial
to move the parameter to allow eta conversion (that is the technical name for the last part of the manipulation you are attempting to do):
(comp (partial apply str)
(partial filter (fn [foo] (some #(= % foo)
(map char (range 65 91))))))
This expression is now a function that takes a string, filters the capital letters and then converts it back to a string (notices that comp
applies functions from right to left).
(NB, that last expression probably isn't very idiomatic Clojure; the first method, or one of the suggestions of others, is better.)
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With