分享您的看法,参加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=> (frequencies (take 10000 (map vec (repeatedly #(a/random-array 2)))))
WARNING: var: cljs.core.async/random-array 不是公共的,在行 1 <cljs repl>
{[0 1] 4964, [1 0] 5036}

cljs.user=> (frequencies (take 10000 (map vec (repeatedly #(clojure.core.async/random-array 3)))))
WARNING: var: 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
...