В настоящее время я работаю над вызовом кода ката, и к нему предъявляются следующие требования:
- Число u (0) = 1 является первым в вас.
- Для каждого x в u, тогда y = 2 * x + 1 и z = 3 * x + 1 тоже должны быть в u.
- Других чисел в u нет.
Я построил несколько функций:
(defn test2 [x n orgN] ;;x is a counter, n is what I want returned as a list
(println n)
(println "this is x: " x)
(cons n (if (not= x (- orgN 1 ))
(do (test2 (+ x 1) (+ 1 (* n 2)) orgN)
(test2 (+ x 1) (+ 1 (* n 3)) orgN))
nil)
))
(defn test2helper [n]
(def x 1)
(test2 x x n)
)
(test2helper 5)
Однако это только возвращает (1 4 13 40) и пропускает целую кучу значений между ними.Минусы - это только создание списка на основе последнего алгоритма 3n + 1, а не сбор других значений, когда я хочу вместо этого последовательность из двух значений, сгенерированных из каждого повторяемого значения n.У меня вопрос, есть ли способ построить последовательность всех значений, а не только 4 из них?
https://www.codewars.com/kata/twice-linear/train/clojure