I am new to functional languages ββand clojure, so please bear with me ...
I am trying to build a list of functions with arbitrary parameters or constants. A function that builds a list of functions already works, although the function itself does not return. I checked this with println.
(edit: ok, it doesn't work correctly yet)
(edit: it works now, but it cannot be "eval" -ed. It seems I need to repeat at least twice to make sure that there are at least two child nodes. Is this possible?)
Here is a snippet:
(def operations (list
(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 would be appreciated, thanks!
source
share