Я изо всех сил пытаюсь найти функцию, которая найдет счастливую середину между функцией get и nth. Я проводил много исследований этих функций типа последовательности, кто-нибудь знает обходной путь для этого или знает функцию, которая выполняет функцию как таковую?
Мне нужна способность nth захватывать подсписки:
=> (nth '(1 (2 3) 4 5) 1)
(2 3)
=> (get 1 '(1 (2 3) 4 5))
nil
И мне нужна способность get возвращать «ноль», когда он выходит за пределы диапазона:
=> (get -1 '(1 (2 3) 4 5))
nil
=> (nth '(1 (2 3) 4 5) -1)
Execution error (IndexOutOfBoundsException) at user/eval149 (REPL:1).
null
Мне нужен этот код для рекурсивной функции sub-seq:
(defn sub-seq [coll i j]
(nth coll i)
(if (< i (+ i j))
(sub-seq coll (inc' i) j)
)
)
( Функция sub-seq должна возвращать элементы 'j', начиная с позиции 'i'.)
Вот несколько примеров выходных данных для того, что я пытаюсь написать:
=> (sub-seq '(1 2 (3 4) (5 (6 7))) 1 2))
(2 (3 4))
=> (sub-seq '(1 2 3 4 5 6 7) 2 4)
(3 4 5 6)
I наконец-то приступил к работе, спасибо всем за помощь:
(defn sub-seq [coll i j]
(conj
(list*
(nth coll i nil)
(if (> j 1)
(sub-seq coll (+ i 1) (- j 1))))))