Я хотел бы взять число, 20 и список. '(1 2 3 4 5 6 7 8 9 10)
и вернуть коллекцию, содержащую два значения для каждого значения в исходном списке: исходное значение в паре с остатком при погружении 20 на это значение. Было бы неплохо, если бы исходные значения каким-то образом были привязаны к остаткам, чтобы я мог легко получить каждое число, которое создало конкретный остаток. В основном я хочу какую-то функцию func
:Clojure: сложная итерация через список?
user=> (func 20 '(1 2 3 4 5 6 7 8 9 10))
'(:0 1, :0 2, :2 3,... :20 0)
Однако я имея невероятно трудное время просто выяснить, как итерацию по списку. Может ли кто-нибудь помочь мне понять, как использовать элементы списка самостоятельно, а затем как вернуть элемент, который был разделен на 20, и если он возвращает остаток?
Моя мысль заключалась в том, чтобы использовать что-то подобное в программе, которая вычисляет квадратные корни. Если номера были закреплены остатком, то я мог бы запросить коллекцию, чтобы получить все числа, которые делят вход с остатком 0.
Здесь был мой предварительным способом идти об этом.
;; My idea on the best way to find a square root is simple.
;; If I want to find the square root of n, divide n in half
;; Then divide our initial number (n) by all numbers in the range 0...n/2
;; Separate out a list of results that only only return a remainder of 0.
;; Then test the results in a comparison to see if the elements of our returned
;; list when squared are equal with the number we want to find a square root of.
;; First I'll develop a function that works with evens and then odds
(defn sqroot-range-high-end [input] (/ input 2))
(sqroot-range-high-end 36) ; 18
(defn make-sqrt-range [input] (range (sqroot-range-high-end (+ 1 input))))
(make-sqrt-range 36) ; '(0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18)
(defn zero-culler [input] (lazy-seq (remove zero? (make-sqrt-range input))))
(zero-culler 100) ; '(1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18)
(defn odd-culler [input] (lazy-seq (remove odd? (zero-culler input))))
(odd-culler 100) ; '(2 4 6 8 10 12 14 16 18)
;;the following is where I got stuck
;;I'm new to clojure and programming,
;;and am just trying to learn in a way that I understand
(defn remainder-culler [input]
(if
(/ input (first odd-culler (input)))
input)
(recur (lazy-seq (input)))
)
(remainder-culler 100)
Вам не нужно обертывать удаление в lazy-seq, он уже ленив. –