【发布时间】:2020-03-04 00:12:44
【问题描述】:
我正在努力寻找一个能在 get 函数和 nth 之间找到快乐媒介的函数。我一直在对这些序列类型函数进行大量研究,有没有人知道解决这个问题或知道这样执行的函数?
我需要 nth 抓取子列表的能力:
=> (nth '(1 (2 3) 4 5) 1)
(2 3)
=> (get 1 '(1 (2 3) 4 5))
nil
而且我需要 get 能够在超出范围时返回“nil”:
=> (get -1 '(1 (2 3) 4 5))
nil
=> (nth '(1 (2 3) 4 5) -1)
Execution error (IndexOutOfBoundsException) at user/eval149 (REPL:1).
null
我需要此代码用于递归子序列函数:
(defn sub-seq [coll i j]
(nth coll i)
(if (< i (+ i j))
(sub-seq coll (inc' i) j)
)
)
(sub-seq 函数应该返回从位置 'i' 开始的 'j' 个元素。)
以下是我正在尝试编写的一些示例输出:
=> (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)
终于让我的功能正常工作了,谢谢大家的帮助:
(defn sub-seq [coll i j]
(conj
(list*
(nth coll i nil)
(if (> j 1)
(sub-seq coll (+ i 1) (- j 1))))))
【问题讨论】:
-
为什么要在索引超出范围时返回
nil?似乎应该有更好的选择。 -
我想通过在输出中显示 x 个超出范围的 x 个单位的 nil x 次来通知用户他们的输入超出了范围。