2024 Clojure 状态调查中分享你的想法!

欢迎!请查阅关于页面以了解更多关于如何使用本站的信息。

+3
Clojure
我似乎无法让旧票无效,所以从这里开始
(take-nth 0 coll) 导致(至少在 Solaris 上)无限占用空间和时间
这不是打印错误,因为以下代码也会引起问题

(let [j 0
 firstprod (apply * (doall (map #(- 1 %) (take-nth j (:props mix)))))]) ; 来自我的参数更新函数

我使用了jvisualvm,jvm正在做一些RNI调用 - 没有运行任何clojure代码
如果置之不理,它将消耗所有堆空间并崩溃jvm
0 是 take-nth 的一个无效参数
即使这样会产生一个无限的无序列表也是无所谓的,虽然这是错误的
但它没有这样做,它实际上摧毁了JVM
这是一个糟糕的破坏性错误,让我花了半天时间找出问题所在
请让某人修复它!

7 个答案

0

由进口器发表的评论

bhurt说:在此错误被标记为无效之前,我想指出,这里的问题是(take-nth 0 any-list)是一个无意义的构造——唯一的问题是当这种情况发生时应该做什么。在我看来,正确的行为是抛出异常。

0

由进口器发表的评论

ataggart说:(链接:[文件:dfNhoS2Cir3543eJe5cbLA]):在负步长时抛出 IllegalArgumentException

0

评论者:stu

调用(take-nth 0 ...)会导致问题,还是只是意识到结果的问题?

0

评论者:[email protected]

我没有看到问题。调用take-nth以及部分消费它返回的序列对我而言工作正常

(take 5 (take-nth 0 (link: 1 2 3)))
;=> (1 1 1 1 1)

注意,它返回的是一个无限惰性序列。问题描述中的例子本质上包括(doall ),这会导致堆溢出

(doall (range))

这个问题仍然让我觉得不成立。

0

评论者:richhickey

(take-nth 0 ...)返回第一个元素的无限序列

(take 12 (take-nth 0 (link: 1 2 3)))
=> (1 1 1 1 1 1 1 1 1 1 1 1)

除了这个,在Solaris上是否还有其他情况发生?

0
参考: https://clojure.atlassian.net/browse/CLJ-291 (由 alex+import 提交)
...