(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