Speedy accessors for the trees of clojure.xml
clojure.xml/parse returns a PersistentStructMap. Is there a way to refer to its struct template? I wish to create accessors for its keys, such as :tag, :attrs, and :content, with the accessor function for speed. --~--~-~--~~~---~--~~ 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 -~--~~~~--~~--~--~---
Re: Speedy accessors for the trees of clojure.xml
On Jun 29, 4:59 pm, samppi rbysam...@gmail.com wrote: clojure.xml/parse returns a PersistentStructMap. Is there a way to refer to its struct template? I wish to create accessors for its keys, such as :tag, :attrs, and :content, with the accessor function for speed. If you look at the top of xml.clj you'll see they already exist. Rich --~--~-~--~~~---~--~~ 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 -~--~~~~--~~--~--~---
Re: Speedy accessors for the trees of clojure.xml
Wonderful. Thanks for the answer. On Jun 29, 2:47 pm, Rich Hickey richhic...@gmail.com wrote: On Jun 29, 4:59 pm, samppi rbysam...@gmail.com wrote: clojure.xml/parse returns a PersistentStructMap. Is there a way to refer to its struct template? I wish to create accessors for its keys, such as :tag, :attrs, and :content, with the accessor function for speed. If you look at the top of xml.clj you'll see they already exist. Rich --~--~-~--~~~---~--~~ 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 -~--~~~~--~~--~--~---
Re: Speedy accessors for the trees of clojure.xml
As a matter of interest, one can get the keys keys in an unknown struct by allocating an empty struct; (def st (create-struct :a :b :c)) (keys (struct st)) (:a :b :c) -Adrian. On Tue, Jun 30, 2009 at 12:14 AM, samppi rbysam...@gmail.com wrote: Wonderful. Thanks for the answer. On Jun 29, 2:47 pm, Rich Hickey richhic...@gmail.com wrote: On Jun 29, 4:59 pm, samppi rbysam...@gmail.com wrote: clojure.xml/parse returns a PersistentStructMap. Is there a way to refer to its struct template? I wish to create accessors for its keys, such as :tag, :attrs, and :content, with the accessor function for speed. If you look at the top of xml.clj you'll see they already exist. Rich --~--~-~--~~~---~--~~ 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 -~--~~~~--~~--~--~---
Re: Speedy accessors for the trees of clojure.xml
Yes, but I'm not so sure that you can get usable accessors with those keys: Clojure 1.0.0- user= (defstruct test-s :a :b :c) #'user/test-s user= (defstruct test-2-s :a :b :c) #'user/test-2-s user= (def accessor-a (accessor test-s :a)) #'user/accessor-a user= (accessor-a (struct test-2-s 5 3 2)) java.lang.Exception: Accessor/struct mismatch (NO_SOURCE_FILE:0) But thanks for the tip anyway! On Jun 29, 6:47 pm, Adrian Cuthbertson adrian.cuthbert...@gmail.com wrote: As a matter of interest, one can get the keys keys in an unknown struct by allocating an empty struct; (def st (create-struct :a :b :c)) (keys (struct st)) (:a :b :c) -Adrian. On Tue, Jun 30, 2009 at 12:14 AM, samppi rbysam...@gmail.com wrote: Wonderful. Thanks for the answer. On Jun 29, 2:47 pm, Rich Hickey richhic...@gmail.com wrote: On Jun 29, 4:59 pm, samppi rbysam...@gmail.com wrote: clojure.xml/parse returns a PersistentStructMap. Is there a way to refer to its struct template? I wish to create accessors for its keys, such as :tag, :attrs, and :content, with the accessor function for speed. If you look at the top of xml.clj you'll see they already exist. Rich --~--~-~--~~~---~--~~ 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 -~--~~~~--~~--~--~---
Re: Speedy accessors for the trees of clojure.xml
How about; (defn get-accessors Given a struct definition, return a map of its keys and generated accessors for each key. [the-struct] (let [st-kys (keys (struct the-struct))] (reduce (fn [accsrs ky] (assoc accsrs ky (accessor the-struct ky))) {} st-kys))) (defstruct test-s :a :b :c) (def acc (get-accessors test-s)) ((acc :a) (struct test-s 5 3 2)) 5 Obviously looking up the accessor to look up the value defeats the performance objective, but not if you get the accessors once, let the needed ones and then use them in a loop processing lots of strucs say. On Tue, Jun 30, 2009 at 6:14 AM, samppi rbysam...@gmail.com wrote: Yes, but I'm not so sure that you can get usable accessors with those keys: Clojure 1.0.0- user= (defstruct test-s :a :b :c) #'user/test-s user= (defstruct test-2-s :a :b :c) #'user/test-2-s user= (def accessor-a (accessor test-s :a)) #'user/accessor-a user= (accessor-a (struct test-2-s 5 3 2)) java.lang.Exception: Accessor/struct mismatch (NO_SOURCE_FILE:0) But thanks for the tip anyway! On Jun 29, 6:47 pm, Adrian Cuthbertson adrian.cuthbert...@gmail.com wrote: As a matter of interest, one can get the keys keys in an unknown struct by allocating an empty struct; (def st (create-struct :a :b :c)) (keys (struct st)) (:a :b :c) -Adrian. On Tue, Jun 30, 2009 at 12:14 AM, samppi rbysam...@gmail.com wrote: Wonderful. Thanks for the answer. On Jun 29, 2:47 pm, Rich Hickey richhic...@gmail.com wrote: On Jun 29, 4:59 pm, samppi rbysam...@gmail.com wrote: clojure.xml/parse returns a PersistentStructMap. Is there a way to refer to its struct template? I wish to create accessors for its keys, such as :tag, :attrs, and :content, with the accessor function for speed. If you look at the top of xml.clj you'll see they already exist. Rich --~--~-~--~~~---~--~~ 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 -~--~~~~--~~--~--~---