2009-10-06 42 views
1
(defn get-doc-list [a-term] 
    (map #(Integer/parseInt %)(take-nth 3 (take (* 3 3)(rest (rest a-term)))))) 

这个函数在小列表上运行良好,但在较大列表上返回一个空序列。问题是什么?为什么这个函数返回零?是因为D.S懒惰吗?

+0

符号df在你的函数中代表什么?当我在REPL中键入代码时,它会抱怨df未定义。 – chollida 2009-10-06 21:24:04

+0

对不起。 df只是另一个功能。用一个任意术语替换。 – unj2 2009-10-06 22:33:05

回答

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 

我建议检查什么inpu t将其“失败”与真的是...也许你逝去的东西,例如[[“1”“1”“1” ...]]

user=> (get-doc-list [["1" "1" "1"]]) 
() 

这是向量的向量,因为你可以看到没有任何处理,所以没有错误或序列产生。

0

问题是您使用 take函数,该函数仅返回集合的前n项。无论您通过 get-doc-list的收藏品有多大,只有前9个可以传递到 take-nth

+0

我想我误解了你的问题。在运行你的代码时,我发现我得到了3个解析整数的列表,不管我传入的列表有多大。我不知道问题是你的'df'方法。你介意把你的问题包括在内吗? – 2009-10-07 03:59:21

+0

在阅读你问题的前一个版本时,我认为看到'df'的定义可以揭示出情况,因为'a-term'也作为该函数的参数传入。 – 2009-10-07 04:03:52