This is close, though it only permits values at leaves and stores the values in the reverse order. Depending on what you need, this might be sufficient:
(defn insert [container letters value] (update-in container letters #(conj % value))) e.g. (-> {} (insert "foo" 3) (insert "foo" 4) (insert "bar" 7)) If you do need values at non-leaf notes, you just need a slightly more sophisticated representation. On 18 August 2013 17:38, Hussein B. <hubaghd...@gmail.com> wrote: > It might be Huffman coding but I don't know Hoffman coding in depth, so I > can't be precise. :) > > But any way, it is a snippet written in an imperative style that I'm > trying to transfer into a functional one. > > The amount of mutation and the if statements are blocking me from doing it > in Clojure. > > > On Sunday, August 18, 2013 4:27:43 PM UTC+2, Chris Ford wrote: > >> Can you explain what the code is supposed to do in English? Java is a >> little hard to read. :-) >> >> Are you doing Huffman coding or similar? >> >> >> On 18 August 2013 16:51, Hussein B. <hubag...@gmail.com> wrote: >> >>> Hi! >>> >>> Would you please help me transforming this imperative code into >>> functional one? >>> >>> The code is a typical snippet in imperative style. A lot of mutations >>> that I don't even know how to start morphing it to Clojure. >>> >>> class Container { >>> Map<String, Container> children; >>> String letter; >>> List<String> value; >>> } >>> >>> void insert(Container container, String letters, String value) { >>> >>> for (int i = 0; i < letters.length; i++) { >>> >>> String letter = new String(letters.chatAt[i]); >>> >>> if (container.children.get(**letter) != null) { >>> container = container.children.get(letter)**; >>> } else { >>> Map<Container> childContainer = new HashMap<>(); >>> container.children.put(letter, childContainer); >>> container = container.children.get(letter)**; >>> } >>> >>> if (i == letters.length() - 1) { >>> container.values.add(value); >>> break; >>> } >>> >>> } >>> >>> >>> Thanks for help and time. >>> >>> -- >>> -- >>> You received this message because you are subscribed to the Google >>> Groups "Clojure" group. >>> To post to this group, send email to clo...@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+u...@**googlegroups.com >>> >>> For more options, visit this group at >>> http://groups.google.com/**group/clojure?hl=en<http://groups.google.com/group/clojure?hl=en> >>> --- >>> You received this message because you are subscribed to the Google >>> Groups "Clojure" group. >>> To unsubscribe from this group and stop receiving emails from it, send >>> an email to clojure+u...@**googlegroups.com. >>> >>> For more options, visit >>> https://groups.google.com/**groups/opt_out<https://groups.google.com/groups/opt_out> >>> . >>> >> >> -- > -- > 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 > --- > You received this message because you are subscribed to the Google Groups > "Clojure" group. > To unsubscribe from this group and stop receiving emails from it, send an > email to clojure+unsubscr...@googlegroups.com. > For more options, visit https://groups.google.com/groups/opt_out. > -- -- 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 --- You received this message because you are subscribed to the Google Groups "Clojure" group. To unsubscribe from this group and stop receiving emails from it, send an email to clojure+unsubscr...@googlegroups.com. For more options, visit https://groups.google.com/groups/opt_out.