I'm new to functional languages and clojure, so please bear with me...
I'm trying to construct a list of functions, with either random parameters or constants. The function that constructs the list of functions is already working, though it doesn't return the function itself. I verified this using println.
(edit: Okay, it isn't working correctly yet after all)
(edit: Now it's working, but it cannot be "eval"-ed. it seems I need to recur at least two times, to ensure there are at least two children nodes. Is this possible?)
Here is the snippet:
(def operations (list #(- %1 %2) #(+ %1 %2) #(* %1 %2) #(/ %1 %2))) (def parameters (list \u \v \w \x \y \z)) (def parameterlistcount 6) (def paramcount 2) (def opcount 4) (defn generate-function ([] (generate-function 2 4 0.5 0.6 () parameters)) ([pc maxdepth fp pp function-list params] (if (and (pos? maxdepth) (< (rand) fp)) (let [function-list (conj function-list (nth operations (rand-int (count operations))))] (recur pc (dec maxdepth) fp pp function-list params)) (if (and (< (rand) pp) (pos? pc)) (let [ params (pop parameters) function-list (conj function-list (nth params (rand-int (count params))))] (if (contains? (set operations) (last function-list) ) (recur (dec pc) maxdepth fp pp function-list params) nil)) (let [function-list (conj function-list (rand-int 100))] (if (or (pos? maxdepth) (pos? pc)) (if (contains? (set operations) (last function-list) ) (recur pc maxdepth fp pp function-list params) nil) function-list)))))) Any help will be appreciated, thanks!