从 match.clj
;; 重要提示:此计算非常非常慢,
;; 我们应该更仔细地查看 - David
这涉及到计算必要列,即,我们将执行匹配次数最多的列。该补丁简化了分散在几个函数中的逻辑,并将其放入一个位置。此外,它还提高了复杂度。当计算列的必要性时,只需计算列中高于通配符的模式即可。前一个实现工作方式是计算模式矩阵中每个条目的值,然后检查每个条目上方是否有通配符。现在,我们只是按列分组,然后逐列折叠,将相同价值相加,并在遇到通配符时,立即返回累加器(reduced acc)
。这避免了为每个条目重复遍历每一列。一个好处是,函数内部所有事物的局部性都很好。
我使用bench.clj中的条目与master进行了计时,却惊讶地发现没有任何时间加速。