Created
July 13, 2016 02:08
-
-
Save pcwerk/75da343b7f66ec70262c7ac51a0e045f to your computer and use it in GitHub Desktop.
Good way to get a tag a string and a map
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
(ns tag-map.clj | |
(:gen-class)) | |
(defn tag | |
[word] | |
(str "`" word "`")) | |
(def line-str "This is a test to see if this works. It's a cool dog test. One must work hard to get the right answer.") | |
(def keywords | |
{"right" (tag "right") | |
"test" (tag "test") | |
"answer" (tag "answer")}) | |
(defn upper | |
[line] | |
(clojure.string/upper-case line)) | |
(defn upper-map [m f] | |
(into {} (for [[k v] m] [(f k) (f v)]))) | |
(defn replace-map | |
"given an input string and a hash-map, returns a new string with all | |
keys in map found in input replaced with the value of the key" | |
[s1 m1] | |
(let [s (upper s1) | |
m (upper-map m1 clojure.string/upper-case)] | |
(clojure.string/replace s (re-pattern (apply str (interpose "|" (map #(java.util.regex.Pattern/quote %) (keys m))))) m))) | |
(defn -main | |
[& args] | |
(println (replace-map line-str keywords))) |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment