My purpose is to write function for replacing multiple substrings in a
string. Here's my approach:

(defn replace-map
  "Replaces substrings in s from (keys m) by (vals m). "
  [s m]
  (loop [cur-str s, rps m]
    (if (empty? rps)
      cur-str
      (recur (.replace s (first (first rps)) (second (first rps)))
             (rest rps)))))

Very simple. And it seems to work with ordinal maps when I test it in
REPL. But I also have some data structure which I make in such way:

(defn make-replacements []
  (loop [rps (transient {})]   ;; transient map for replacements
    (if (empty? skills)
      (persistent! rps)
      (recur (conj! rps (get-more-replacements-from-db))))))

(There's much more text in real code, but I cut it up to on function
get-more-replacements-from-db).

So, the datastructure I get must be simple persistent map.
(type (make-replacements)) gives PersistentTreeMap.
In REPL it has exactly same syntax as any other map, and
((make-replacements) substring) gives right replacements.
In other words, there's everything working... except my procedure. I
mean, for some substrings it works ok, while others may be not
replaced properly.

I'm very confused with this behavior. What is the reason? And what can
I do to avoid it?

-- 
You received this message because you are subscribed to the Google
Groups "Clojure" group.
To post to this group, send email to clojure@googlegroups.com
Note that posts from new members are moderated - please be patient with your 
first post.
To unsubscribe from this group, send email to
clojure+unsubscr...@googlegroups.com
For more options, visit this group at
http://groups.google.com/group/clojure?hl=en

Reply via email to