请在 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
对于 take-nth,0 是 InvalidArgument
即使它生成无限个 nil 的惰性序列也是错误的,尽管如此我并不介意
它并没有这样做,而是积极地破坏 JVM
这是一个糟糕的破坏性错误,我花了半天才弄清楚到底发生了什么
请让某人修复它!

7 答案

0

评论由:importer 发布

bhurt 表示:在这个错误被标记为无效之前,让我指出这里的问题在于 (take-nth 0 any-list) 是一个无意义的构建 - 这里唯一的争议点是当这种情况发生时应该做什么。据我所知,正确的行为是抛出一个异常。

0

评论由:importer 发布

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

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