Будучи совершенно новым для clojure, я все еще борюсь с его функциями.Если у меня есть 2 списка, скажем «1234» и «abcd», мне нужно составить все возможные упорядоченные списки длины 4. Вывод, который я хочу получить, для длины 4:
("1234" "123d" "12c4" "12cd" "1b34" "1b3d" "1bc4" "1bcd"
"a234" "a23d" "a2c4" "a2cd" "ab34" "ab3d" "abc4" "abcd")
, что 2 ^ nчисло в зависимости от входных данных.
Я написал следующую функцию для случайного обхода одной строки / списка.Аргумент [par] будет что-то вроде ["1234" "abcd"]
(defn make-string [par] (let [c1 (first par) c2 (second par)] ;version 3 0.63 msec
(apply str (for [loc (partition 2 (interleave c1 c2))
:let [ch (if (< (rand) 0.5) (first loc) (second loc))]]
ch))))
Вывод будет 1 из 16 упорядоченных списков выше.Каждый из двух входных списков всегда будет иметь одинаковую длину, скажем, 2,3,4,5, вплоть до 2 ^ 38 или в пределах доступной памяти.В вышеупомянутой функции я попытался изменить это, чтобы генерировать все упорядоченные списки, но не удалось.Надеюсь, кто-нибудь сможет мне помочь.Спасибо.