2009-10-06 18 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