首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Clojure IndexOutOfBoundsException

Clojure IndexOutOfBoundsException
EN

Stack Overflow用户
提问于 2014-08-08 15:27:39
回答 1查看 1.2K关注 0票数 2
代码语言:javascript
复制
((fn [coll] (letfn [(add-item [acc coll idx] 
                              (conj acc (nth coll idx)))

                    (add-group [acc coll] 
                               (conj acc (create-group coll)))

                    (decrease-coll [coll acc] 
                                   (drop (count (last acc)) coll))

                    (not-group-member? [idx coll] 
                                       (not= (first coll) (nth coll idx)))

                    (out-of-bounds? [idx coll] 
                                    (or (empty? coll) (> idx (count coll))))

                    (create-group [coll] (loop [idx 0 
                                                coll coll
                                                acc []]
                                           (if (or (out-of-bounds? idx coll)
                                                   (not-group-member? idx coll))
                                             acc
                                             (recur (inc idx) coll (add-item acc coll idx)))))
                    (process-coll [coll] (loop [coll coll
                                                acc []]
                                           (if (empty? coll)
                                             acc
                                             (recur (decrease-coll coll acc) 
                                                    (add-group acc coll)))))] 
                    (process-coll coll))) [1 1 2 1 1 1])

当我尝试运行这个程序时,我会收到

代码语言:javascript
复制
java.lang.IndexOutOfBoundsException: null
             RT.java:795 clojure.lang.RT.nthFrom
             RT.java:764 clojure.lang.RT.nth
 /clojure/scratch-work-4clojure.clj:13 user/eval10378[fn]
 /clojure/scratch-work-4clojure.clj:22 user/eval10378[fn]
 /clojure/scratch-work-4clojure.clj:7 user/eval10378[fn]
 /clojure/scratch-work-4clojure.clj:30 user/eval10378[fn]
 /clojure/scratch-work-4clojure.clj:31 user/eval10378[fn]
 /clojure/scratch-work-4clojure.clj:3 user/eval10378

我试着调试这个已经有一段时间了。我把它分解成几个函数,试图跟踪导致错误的原因,但还无法确定它。对于造成这种情况的原因以及将来如何在Clojure中调试这类错误,我们将不胜感激。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-08-08 15:35:50

您的out-of-bounds?检查是错误的。您需要的是>=而不是>。索引从0到n-1。

票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/25206964

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档