This page is not created by, affiliated with, or supported by Slack Technologies, Inc.
2016-07-05
Channels
- # admin-announcements (10)
- # beginners (18)
- # boot (29)
- # capetown (2)
- # cider (46)
- # cljs-dev (1)
- # cljsrn (69)
- # clojure (126)
- # clojure-android (9)
- # clojure-gamedev (3)
- # clojure-greece (16)
- # clojure-poland (13)
- # clojure-russia (45)
- # clojure-spec (27)
- # clojure-uk (21)
- # clojurescript (99)
- # cursive (1)
- # datascript (1)
- # datomic (42)
- # functionalprogramming (10)
- # hoplon (47)
- # instaparse (12)
- # jobs (5)
- # jobs-rus (9)
- # keechma (22)
- # lein-figwheel (8)
- # leiningen (5)
- # luminus (1)
- # mount (7)
- # off-topic (1)
- # om (15)
- # onyx (47)
- # other-languages (14)
- # planck (28)
- # proton (8)
- # re-frame (30)
- # reagent (15)
- # remote-jobs (3)
- # slack-help (2)
- # untangled (9)
- # yada (6)
знаю что решение простое, не могу что-то сообразить, у меня есть лист элементов и лист размерностей мне нужно разбить лист по размерностям
можно попробовать spit-at https://clojuredocs.org/clojure.core/split-at и дальше рекурсивно хвост
(:r (reduce #(assoc %1 :r (conj (:r %1) (take %2 (:s %1))) :s (drop %2 (:s %1))) {:r [] :s (range 1 7)} (list 2 3 1)))
Я вот это использую http://clojure.org/api/cheatsheet
через рекурсию мб?
(loop [s '(1 2 3 4 5 6) d '(2 3 1) r []]
(if (= (count d) 0)
r
(let [dx (first d)]
(recur (drop dx s) (rest d) (conj r (take dx s))))))
м/б (empty? d)
(defn chunks [data [n & counts]]
(when (seq data)
(cons (take n data)
(lazy-seq (chunks (drop n data) counts)))))

@mkaschenko: так то понятно, что можно просто
(defn chunks [data [n & counts]]
(when (seq data)
(cons (take n data)
(chunks (drop n data) counts))))
а рекурсия чем-то отличается от loop+recur? из за длинного списка стек не помрет?
@kronos_vano: здесь же вроде не хвостовая..
я не уверен что в кложе есть хвостовая
я бы не сказал что там вообще рекурсия, больше похоже на цикл
Note that recur is the only non-stack-consuming looping construct in Clojur
теперь понятно
преобразование стека вызовов в итеративный цикл это же и есть вроде оптимизация хв. рекурсии, если грубо
энивей, хорошая задачка. сохраню