(defn get-doc-list [a-term]
(map #(Integer/parseInt %)(take-nth 3 (take (* 3 3)(rest (rest a-term))))))
此函数适用于小型列表,但在较大的列表上返回空序列。有什么问题?
答案 0 :(得分:1)
这肯定是一个输入问题,因为你的函数最多会解析3个整数:
user=> (get-doc-list (repeat "1"))
(1 1 1)
如果提供的字符串少于3个,则只返回空序列:
user=> (get-doc-list ["1" "1"])
()
如果给出非字符串,则抛出异常:
user=> (get-doc-list [1 1 1])
java.lang.ClassCastException: java.lang.Integer cannot be cast to java.lang.String
我建议检查输入“失败”的确是......也许你传递的内容类似[[“1”“1”“1”...]]
user=> (get-doc-list [["1" "1" "1"]])
()
这是向量的向量,因为您可以看到没有处理任何内容,因此没有错误或序列要生成。
答案 1 :(得分:0)
问题是您使用 take
函数,它只返回集合的前n项。无论您传递的集合有多大get-doc-list
,只有前9个集合会传递给take-nth
。