Thanks Chouser! I had not thought of moving the (list 'fn ...etc) bit into the eval statement, it works perfectly! here is the final result! http://github.com/tristan/modelmaker/blob/d7dbdfa9b998cfc6b846ea5c235b4496ed8caa63/infix_parser.clj
.Tristan On 8 Jan., 16:15, Chouser <chou...@gmail.com> wrote: > On Fri, Jan 8, 2010 at 9:10 AM, tristan <tristan.k...@gmail.com> wrote: > > > At first I thought I had solved it, as calling (parse-infix "a*(b+c)") > > returned the desired function that i could call. However as soon as i > > attempted to use it in the form (parse-infix users-input) it falls > > over with a "Don't know how to create ISeq from: clojure.lang.Symbol" > > error (examples in code at the bottom of the above file). I have > > fallen victim here to my own lack of understanding of macros. I now > > understand my folly and have a better understanding of how macro > > expansion works, however now I'm stuck as to how to solve this > > problem. > > I think you're very close. Having code that takes a string and > returns a anonymous fn form is good, but as you noticed having > that code in a macro doesn't seem to be what you want. Because > you're starting with a user-supplied string, you are going to > need to use 'eval'. > > Perhaps try chaning parse-infix to be a fn instead of a macro, > but still have it return (list 'fn ...etc). > > Then (eval (parse-infix ...)) to get an actual fn object that you > can call repeatedly. > > --Chouser > -- > -- I funded Clojure 2010, did you?
-- 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