It seems to me you want: user=> (list + 1 2) (#<core$_PLUS___4006 clojure.core$_plus___4...@1acd47> 1 2)
As opposed to: user=> '(+ 1 2) (+ 1 2) Regarding examining a function, contrib has some helpers written by Chris user=> (use 'clojure.contrib.repl-utils) (source func) (show func) In your case source wont be useful as the function is generated not read from source. The output from show is a bit opaque to me so not sure if it is useful to you. I think once it is compiled a function is not easy to examine... so as you alluded to the best alternative would be to keep the AST? Regards, Tim. On Jul 7, 10:18 pm, Robert Campbell <rrc...@gmail.com> wrote: > I'm trying to write the first basic GP example in this free > book:http://www.lulu.com/items/volume_63/2167000/2167025/2/print/book.pdf > > I've gotten a lot of the suppor methods working correctly (like > fitness) but I'm having problem convering the pseudocode on page 14 > for generating random expressions to make up my initial population. > Here's what I have so far: > > (defn gen-rand-expr [functions terminals max-depth arity method] > (if (or (= max-depth 0) (and (= method :grow) (< (rand) (/ (count > terminals) (+ (count terminals) (count functions)))))) > (rand-element terminals) > (let [arg1 (gen-rand-expr functions terminals (- max-depth 1) arity > method) > arg2 (gen-rand-expr functions terminals (- max-depth 1) arity > method) > func (rand-element functions)] > (func arg1 arg2)))) > > First, how can I print out the definition of a function in clojure? > For example, if I do (defn add [x y] (+ x y)) how can inspect this > definition, like (show-def add) -> (defn add [x y] (+ x y)). This > would help a lot in debugging the random programs I'm trying to > generate. > > Second, I believe the last line is the problem in my code. Let's > assume the function randomly selected was +, it will run (+ 1 2) and > the entire function returns 3 instead of a randomly generated syntax > tree like I need. I then tried '(func arg1 arg2) hoping it would > prevent evaluation, but then it will always just return (func arg1 > arg2) which isn't what I need either. I need it to actually return a > syntax tree made up of expressions like (+ 1 2) but unevaluated. > > I am guessing I need to start reading and using macros at this point? > > Rob --~--~---------~--~----~------------~-------~--~----~ 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 -~----------~----~----~----~------~----~------~--~---