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

欢迎!请参阅 关于 页面以了解有关该功能的更多信息。

0 投票
core.async
在 cljs 中,{{clojure.core.async/random-array}} 的 shuffle 计算不正确,它总是为 arg n=2 返回 \[1 0\]。这破坏了 alts! 对操作选择的非确定性承诺,它总是尝试按顺序选择第二个元素。此外,当 N>1 时,alts! 从不首先选择第一个操作。

使用 goog.array.shuffle 来进行乱序。 (此 API 也由 cljs.core/shuffle 使用)

新实现通过测试并表现更好

{代码:java}

cljs.user=> (频数 (取 (重复 #(a(random-array 2)) 10000)))
警告:变量: cljs.core.async/random-array 在第 1 行 <cljs repl> 不是公共的
{[0 1] 4964, [1 0] 5036}

cljs.user=> (频数 (取 (重复 #(clojure.core.async/random-array 3)) 10000)))
警告:变量: cljs.core.async/random-array 在第 1 行 <cljs repl> 不是公共的
{[0 1 2] 1720, [1 2 0] 1679, [2 0 1] 1669, [0 2 1] 1573, [1 0 2] 1682, [2 1 0] 1677}
cljs.user=> (pp)
{[0 1 2] 1720,
 [1 2 0] 1679,
 [2 0 1] 1669,
 [0 2 1] 1573,
 [1 0 2] 1682,
 [2 1 0] 1677}
nil

3 个回答

0 投票

评论由:mfikes 提出

ASYNC-227.patch LGTM (y)

0 投票

评论由:gshayban 提出

在 14bed8383516ab119c3fc51c2882112000eb5664 , 0.4.500 中修复

0 投票
...