Я хочу переписать (я не уверен, если оригинальная реализация ленивая из не) ленивой реализация Clojure перемежения с использованием lazy-seq
, который работает следующим образом:ленивых повторного внедрение Clojure Interleaving
(take 4 (lazy-interleave ’(1 2 3) ’(a b c)))
(1 a 2 b)
I придумал что-то вроде этого, но я не знаю, почему он не работает:
(defn lazy-interleave [v1 v2]
(lazy-seq (concat (list (first v1) (first v2))) (lazy-interleave (next v1) (next v2)))
)
Edit:
Благодаря ответу Артура, вот модифицированный рабочий раствор:
(defn lazy-interleave [v1 v2]
(lazy-seq
(cons (first v1) (cons (first v2) (lazy-interleave (rest v1) (rest v2))))
)
)
Спасибо, я не знал, что есть «ленивый кот». Только один вопрос: даже без «нуля» проверки с ленивой кошкой мы можем «взять» ограниченное количество элементов из «ленивого чередования», но почему мы не можем сделать это с ленивым секем? в вашем примере я получу '(1 ноль)' for '(возьмите 2 (lazy-interleave [1] [])), но даже используя' take' мой код не работает – Yar
Как программист, который любит кошек , Я пытаюсь использовать эту функцию всякий раз, когда это можно сделать, чтобы соответствовать –
@ArthurUlfeldt lol полностью ее получил. Еще раз спасибо. – Yar