Ich bin neu in funktionalen Sprachen und Clojure, so bitte mit mir zu tragen...
Ich versuche, eine Liste von Funktionen zu erstellen, entweder mit zufälligen Parametern oder Konstanten. Die Funktion, die die Liste der Funktionen konstruiert, funktioniert bereits, obwohl sie die Funktion selbst nicht zurückgibt. Ich habe dies mit println überprüft.
(edit: Okay, es funktioniert also doch noch nicht richtig)
(edit: Jetzt funktioniert es, aber es kann nicht "eval"-ed werden. Es scheint, dass ich mindestens zwei Mal wiederholen muss, um sicherzustellen, dass es mindestens zwei Kinderknoten gibt. Ist das möglich?)
Hier ist der Ausschnitt:
(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))))))
Für jede Hilfe sind wir dankbar, danke!