>From yesterday: (defmacro eval-in "Eval a Clojure form in a different namespace and switch back to current namespace.
Args: code - Clojure form as string ns - Target namespace as string" [code ns] `(do (in-ns '~(symbol ns)) (let [ret# (eval '~(read-string code))] (in-ns '~(ns-name *ns*)) ret#))) user=> (def generator "(X 400 400)") #'user/generator user=> (def image (eval-in generator "clevolution.version.version0-1-1")) CompilerException java.lang.ClassCastException: clojure.lang.Symbol cannot be cast to java.lang.String, compiling:(NO_SOURCE_PATH:1) user=> (def image (eval-in "(X 400 400)" "clevolution.version.version0-1-1")) #'user/image So it's OK to pass the explicit string but not the symbol. What am I not getting here? -A On Tue, Dec 18, 2012 at 12:48 AM, Alan Shaw <noden...@gmail.com> wrote: > Now I do, and the macro worked! > I believe I have a problem using the macro from a function, but leaving > that for tomorrow. > > Thanks BG! > > -A > > > > On Tue, Dec 18, 2012 at 12:19 AM, Baishampayan Ghose <b.gh...@gmail.com>wrote: > >> Do you have target ns "clevolution.version.version0-1-1" required? >> >> -BG >> >> On Tue, Dec 18, 2012 at 1:38 PM, Alan Shaw <noden...@gmail.com> wrote: >> > BG, >> > The macro doesn't seem to do the trick. The function X is interned in >> the >> > target namespace, but: >> > >> > user=> (def image (eval-in "(X 400 400)" >> > "clevolution.version.version0-1-1")) >> > CompilerException java.lang.RuntimeException: Unable to resolve symbol: >> X in >> > this context, compiling:(NO_SOURCE_PATH:1) >> > >> > >> > On Mon, Dec 17, 2012 at 11:53 PM, Alan Shaw <noden...@gmail.com> wrote: >> >> >> >> Oh yes, the something.something is fixed so I can just prepend it, >> thanks. >> >> (Hadn't noticed your macro takes the ns as a string!) >> >> >> >> -A >> >> >> >> >> >> >> >> On Mon, Dec 17, 2012 at 11:47 PM, Baishampayan Ghose < >> b.gh...@gmail.com> >> >> wrote: >> >>> >> >>> Alan, >> >>> >> >>> What you're asking for is to derive the ns "clojure.core" given only >> >>> "core". Not sure if that's possible. >> >>> >> >>> The namespace constitutes the whole dotted structure and not just the >> >>> last component, I am afraid. >> >>> >> >>> If the actual ns is something.something.version-0-1-1, then you need >> >>> the string "something.something.version-0-1-1" and not just >> >>> "version-0-1-1" [unless of course you have some other way of deriving >> >>> it from info that's embedded in _your_ code or structure thereof]. >> >>> >> >>> >> >>> -BG >> >>> >> >>> On Tue, Dec 18, 2012 at 1:10 PM, Alan Shaw <noden...@gmail.com> >> wrote: >> >>> > Thanks BG, I'm trying that. >> >>> > But I don't think it addresses how to get from the string >> >>> > "version-0-1-1" to >> >>> > the namespace something.something.version-0-1-1. How can I do that? >> >>> > >> >>> > -A >> >>> > >> >>> > >> >>> > >> >>> > On Mon, Dec 17, 2012 at 11:26 PM, Baishampayan Ghose >> >>> > <b.gh...@gmail.com> >> >>> > wrote: >> >>> >> >> >>> >> Alan, >> >>> >> >> >>> >> Something like this might work for you - >> >>> >> >> >>> >> (defmacro eval-in >> >>> >> "Eval a Clojure form in a different namespace and switch back to >> >>> >> current namespace. >> >>> >> >> >>> >> Args: >> >>> >> code - Clojure form as string >> >>> >> ns - Target namespace as string" >> >>> >> [code ns] >> >>> >> `(do >> >>> >> (in-ns '~(symbol ns)) >> >>> >> (let [ret# (eval '~(read-string code))] >> >>> >> (in-ns '~(ns-name *ns*)) >> >>> >> ret#))) >> >>> >> >> >>> >> Warning - I haven't really tested this code. >> >>> >> >> >>> >> -BG >> >>> >> >> >>> >> On Tue, Dec 18, 2012 at 12:37 PM, Alan Shaw <noden...@gmail.com> >> >>> >> wrote: >> >>> >> > Thanks, Las! >> >>> >> > >> >>> >> > Ok say I have a file in which there is string such as >> >>> >> > >> >>> >> > "(- (atan (bw-noise 902 2 0.7604615575402431 400 400)) >> >>> >> > (read-image-from-file >> >>> >> > \"images/Dawn_on_Callipygea.png\"))" >> >>> >> > >> >>> >> > and another >> >>> >> > >> >>> >> > "version-0-0-1" >> >>> >> > >> >>> >> > and I have a namespace version-0-0-1 into which functions named >> atan >> >>> >> > etc. >> >>> >> > are all :referred. I want to evaluate the expression in that >> >>> >> > particular >> >>> >> > context, and not remain there when I'm done. >> >>> >> > >> >>> >> > -A >> >>> >> > >> >>> >> > >> >>> >> > >> >>> >> > On Mon, Dec 17, 2012 at 11:00 PM, László Török < >> ltoro...@gmail.com> >> >>> >> > wrote: >> >>> >> >> >> >>> >> >> ah, sorry, it's a bit early for me >> >>> >> >> >> >>> >> >> (in-ns (ns-name user-ns)) >> >>> >> >> >> >>> >> >> if you could post a simple example for the second part of your >> >>> >> >> question >> >>> >> >> I >> >>> >> >> maybe able to help. >> >>> >> >> >> >>> >> >> Las >> >>> >> >> >> >>> >> >> Alan Shaw 2012. december 18., kedd napon a következőt írta: >> >>> >> >> >> >>> >> >>> Ah no, that puts me in a new user-ns namespace! Not what I >> wanted! >> >>> >> >>> >> >>> >> >>> >> >>> >> >>> On Mon, Dec 17, 2012 at 10:51 PM, László Török >> >>> >> >>> <ltoro...@gmail.com> >> >>> >> >>> wrote: >> >>> >> >>>> >> >>> >> >>>> Try (in-ns 'user-ns) >> >>> >> >>>> >> >>> >> >>>> Las >> >>> >> >>>> >> >>> >> >>>> On Dec 18, 2012 7:50 AM, "Alan Shaw" <noden...@gmail.com> >> wrote: >> >>> >> >>>>> >> >>> >> >>>>> user=> *ns* >> >>> >> >>>>> #<Namespace user> >> >>> >> >>>>> user=> (def user-ns *ns*) >> >>> >> >>>>> #'user/user-ns >> >>> >> >>>>> user=> user-ns >> >>> >> >>>>> #<Namespace user> >> >>> >> >>>>> user=> (in-ns user-ns) >> >>> >> >>>>> ClassCastException clojure.lang.Namespace cannot be cast to >> >>> >> >>>>> clojure.lang.Symbol clojure.lang.RT$1.invoke (RT.java:226) >> >>> >> >>>>> >> >>> >> >>>>> It appears I'm not understanding how namespaces are >> represented. >> >>> >> >>>>> >> >>> >> >>>>> Also, is it just wrong of me to want to remember a namespace >> I >> >>> >> >>>>> was >> >>> >> >>>>> working in and try to go back to it later? >> >>> >> >>>>> >> >>> >> >>>>> The slightly larger context is: I'm saving an s-expression >> with >> >>> >> >>>>> unqualified names in it into a file as a string. Also saving >> a >> >>> >> >>>>> string >> >>> >> >>>>> indicating the name of the environment in which that string >> >>> >> >>>>> should >> >>> >> >>>>> be (read >> >>> >> >>>>> and) eval'ed so that the names will resolve to the >> appropriate >> >>> >> >>>>> functions. >> >>> >> >>>>> Advice on managing this would be appreciated. >> >>> >> >>>>> >> >>> >> >>>>> -Alan Shaw >> >>> >> >>>>> >> >>> >> >>>>> -- >> >>> >> >>>>> 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 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 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 >> >>> >> >> >> >>> >> >> >> >>> >> >> >> >>> >> >> -- >> >>> >> >> László Török >> >>> >> >> >> >>> >> >> -- >> >>> >> >> 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 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 >> >>> >> >> >>> >> >> >>> >> >> >>> >> -- >> >>> >> Baishampayan Ghose >> >>> >> b.ghose at gmail.com >> >>> >> >> >>> >> -- >> >>> >> 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 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 >> >>> >> >>> >> >>> >> >>> -- >> >>> Baishampayan Ghose >> >>> b.ghose at gmail.com >> >>> >> >>> -- >> >>> 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 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 >> >> >> >> -- >> Baishampayan Ghose >> b.ghose at gmail.com >> >> -- >> 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 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