Я новичок в функциональных языках и clojure, поэтому, пожалуйста, потерпите меня ...
Я пытаюсь создать список функций со случайными параметрами или константами. Функция, которая создает список функций, уже работает, хотя она не возвращает саму функцию. Я подтвердил это с помощью println.
(редактировать: ладно, в конце концов, он еще не работает правильно)
(редактировать: теперь он работает, но он не может быть "вычислен"). Мне кажется, мне нужно повториться как минимум два раза, чтобы убедиться, что есть хотя бы два дочерних узла. Возможно ли это? 1008 *
Вот фрагмент:
(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))))))
Любая помощь будет оценена, спасибо!