(defn get-doc-list [a-term]
(map #(Integer/parseInt %)(take-nth 3 (take (* 3 3)(rest (rest a-term))))))
这个函数在小列表上运行良好,但在较大列表上返回一个空序列。问题是什么?为什么这个函数返回零?是因为D.S懒惰吗?
(defn get-doc-list [a-term]
(map #(Integer/parseInt %)(take-nth 3 (take (* 3 3)(rest (rest a-term))))))
这个函数在小列表上运行良好,但在较大列表上返回一个空序列。问题是什么?为什么这个函数返回零?是因为D.S懒惰吗?
这当然是一个输入的问题,因为你的函数将解析为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
我建议检查什么inpu t将其“失败”与真的是...也许你逝去的东西,例如[[“1”“1”“1” ...]]
user=> (get-doc-list [["1" "1" "1"]])
()
这是向量的向量,因为你可以看到没有任何处理,所以没有错误或序列产生。
问题是您使用
take
函数,该函数仅返回集合的前n项。无论您通过
get-doc-list
的收藏品有多大,只有前9个可以传递到
take-nth
。
我想我误解了你的问题。在运行你的代码时,我发现我得到了3个解析整数的列表,不管我传入的列表有多大。我不知道问题是你的'df'方法。你介意把你的问题包括在内吗? – 2009-10-07 03:59:21
在阅读你问题的前一个版本时,我认为看到'df'的定义可以揭示出情况,因为'a-term'也作为该函数的参数传入。 – 2009-10-07 04:03:52
符号df在你的函数中代表什么?当我在REPL中键入代码时,它会抱怨df未定义。 – chollida 2009-10-06 21:24:04
对不起。 df只是另一个功能。用一个任意术语替换。 – unj2 2009-10-06 22:33:05