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的无效参数
即使会产生无限的nil惰性序列,我也可以接受,即使这是错误的
但它没有这样做,它实际上破坏了JVM
这是一个棘手的破坏性错误,我花了半天时间才弄清楚发生了什么
请让某人修复它!

7个回答

0

评论由:importer发表

bhurt说:在将此错误标记为无效之前,我想指出的问题是,(take-nth 0 any-list) 是一个没有意义的构造 - 当它发生时,唯一的问题是应该怎么做。我认为正确的做法是抛出异常。

0

评论由:importer发表

ataggart说:(链接:[file:dfNhoS2Cir3543eJe5cbLA]) 调用负步长时抛出IllegalArgumentException

0
0

评论者:stu

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

0

评论者:[email protected]

我没有看到问题。调用 take-nth 及其返回的 seq 的部分消费对于我来说都工作正常

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

但是请注意,它返回了一个无限的延迟序列。问题描述中的示例似乎包括基本上的 (doall <infinite-lazy-seq>),这将耗尽堆内存

(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 报告)
...