Je suis nouveau sur les langages fonctionnels et Clojure, donc s'il vous plaît garder avec moi ...Comment retourner la sortie d'une fonction récursive dans Clojure
Je suis en train de construire une liste de fonctions, soit au hasard paramètres ou constantes. La fonction qui construit la liste des fonctions fonctionne déjà, bien qu'elle ne renvoie pas la fonction elle-même. J'ai vérifié cela en utilisant println.
(modifier: D'accord, il ne fonctionne pas encore correctement après tout)
(edit: Maintenant, il fonctionne, mais il ne peut pas être « eval » il semble -ed que je dois reproduire au moins deux. fois, pour assurer il y a au moins deux noeuds enfants est-ce possible)
Voici l'extrait:.?
(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))))))
Toute aide sera appréciée, merci!
Je suis reconnaissant pour les suggestions que vous m'avez données, mais je pense que j'aurais dû vous faire part de mon intention. Mon but est de créer une fonction, à utiliser comme population dans un problème de programmation génétique. @Michal - Je ne peux pas comprendre comment je pourrais (eval) ceci ... @Michiel - Je vois. – Silanglaya