Hi everyone! 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!