Thanks to both Atkaaz & Tim...
you were both very helpful, albeit for different reasons! Atkaaz pointed me to a promising syntax-quoting library that I didn't even know existed and Tim essentially provided the solution I settled for. Since that code-snippet can be found in core, I'll just assume this is the way to go...I also didn't want to bring in external dependencies as I'm preparing an nlp-lib that acts like glue between several java nlp libs out there... something like U-Compare but on the API level...the less dependencies the better :)

Jim


On 24/02/13 09:53, Tim Reinke wrote:
Coincidentally, I just found this in clojure/core/protocols.clj <https://github.com/clojure/clojure/blob/master/src/clj/clojure/core/protocols.clj> (not that this is necessarily the best way to do this):

(def arr-impl
  '(internal-reduce
       [a-seq f val]
       (let [arr (.array a-seq)]
         (loop [i (.index a-seq)
                val val]
           (if (< i (alength arr))
             (let [ret (f val (aget arr i))]
                (if (reduced? ret)
                  @ret
                  (recur (inc i) ret)))
             val)))))

(defn- emit-array-impls*
  [syms]
  (apply
   concat
   (map
    (fn [s]
      [(symbol (str "clojure.lang.ArraySeq$ArraySeq_" s))
       arr-impl])
    syms)))

(defmacro emit-array-impls
  [& syms]
  `(extend-protocol InternalReduce
     ~@(emit-array-impls* syms)))

(emit-array-impls int long float double byte char boolean)
On Saturday, February 23, 2013 4:03:02 AM UTC-8, Jim foo.bar wrote:

    I seem to be unable to quote a form and then repeatedly pass it
    inside
    the extend-protocol macro...something like this:

    (def ^:private co-stub
    '(run [this ^String text]
        (let [ann (edu.stanford.nlp.pipeline.Annotation. text)]
          (.annotate this ann) ann)))


    (extend-protocol IComponent
    edu.stanford.nlp.pipeline.POSTaggerAnnotator  co-stub
    edu.stanford.nlp.pipeline.PTBTokenizerAnnotator co-stub
    edu.stanford.nlp.pipeline.WordsToSentencesAnnotator co-stub
    edu.stanford.nlp.pipeline.CleanXmlAnnotator co-stub
    edu.stanford.nlp.pipeline.MorphaAnnotator co-stub
    edu.stanford.nlp.pipeline.NERCombinerAnnotator  co-stub
    edu.stanford.nlp.pipeline.RegexNERAnnotator co-stub
    edu.stanford.nlp.pipeline.TrueCaseAnnotator co-stub
    edu.stanford.nlp.pipeline.ParserAnnotator co-stub
    edu.stanford.nlp.pipeline.DeterministicCorefAnnotator co-stub
    )

    neither quoted version nor the back-quoted version work...The former
    throws :
    ClassCastException clojure.lang.PersistentList cannot be cast to
    java.lang.Class  clojure.core/implements? (core_deftype.clj:512)

    and the latter throws:

    ClassCastException clojure.lang.Cons cannot be cast to
    java.lang.Class
    clojure.core/implements? (core_deftype.clj:512)

    any macro-gurus around?

    Jim

--
--
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.


Reply via email to