2024 Clojure调查问卷中分享您的想法!

欢迎!请在关于页面查看有关如何使用此功能的更多信息。

+2
转换器

当使用1个参数调用时,reductions当前不提供转换器。

建议

  • 带有显式初始化值的 reductions 转换器:reductions-with
  • 由于参数冲突,这是一个单独的函数,而不是与 reductions 结合

第二个补丁建议了一个允许显式初始化值的变体:reductions-with

补丁: 0003-add-reductions-with.patch

由: Alex Miller

16 个答案

0

评论者:[email protected]

建议的补丁通过使用不带参数的函数来调用 reductions 获取 "init" 值。我希望有一个接受显式 "init" 的 "reductions" 转换器,而不是依赖于一个零参数(f)。

如果我记得没错,Rich 对支持不带有初始化减量(类似于 Common Lisp)表示了一些遗憾。我的理解是有显式初始化对新 Clojure 代码来说是首选。

遗憾的是,对于转换器的显式初始化参数会与标准的 "no-init" reductions(链接:f coll)发生冲突。在我的代码中,我已经使用了 "accumulations" 这个名字来命名这个转换器。另一个可能的名字可能是 "reductions-with"。

0

评论者:pyr

嗨,Steve,

我非常希望初始化值也能明确,但遗憾的是,即使测试 2-ary 变体的第二个参数——这可能会更加令人困惑——也无法用普通的 "reductions" 来做这件事。

我喜欢提供 "reductions-with" 变体的想法,这个变体可以强制使用初始化值。如果需要,我很高兴为补丁添加这个功能。

0

评论者:pyr

@Steve Miner 我添加了一个包含 reductions-with 的变体。

0

评论者:pyr

我能做些什么来推动这个项目的进展吗?
@alexmiller 对代码本身有何评论?

0

评论者:alexmiller

还没来得及看,抱歉。

0

评论者:pyr

@alexmiller,如果结果是有助于 clojure.spec,我会花点时间来审查一下 :-)

0

评论者:[email protected]

对于测试,我建议您比较 transducer 版本的输出与相似调用序列 reductions 的输出。例如:

`

(is (= (reductions + 3 (range 20)) (sequence (reductions-with + 3) (range 20)))

`

我希望看到这种一致性。0002 补丁没有用与当前 Clojure reductions 相同的方式处理 init。

0

评论者:pyr

@alexmiller 我再推一把,至少对补丁和 reductions-with 变体有所了解,因为 1.9 似乎已接近发布。

0

评论者:alexmiller

对不起,我不知道我何时能腾出时间,也不知道它是否会被考虑 进1.9版本。我不知道它会不会被考虑进去,只是...我不确定。

0

评论者:pyr

@alexmiller,感谢你的迅速回复。我正在确保自己等待反馈时能快速行动。干杯!

0

评论者:pyr

@alexmiller,有没有对这个能被采纳或者我如何修改/完善代码的任何进一步见解?

0

评论者:alexmiller

有机会我会试用一下。

0

评论者:alexmiller

我认为我更喜欢使用 reductions-with 的方法,而不是使用 reductions 进行重载。

你这里有两个对 @state 的解引用 - 考虑到我们所做的假设,这并不是错误的,但我认为在 let 中只看到一个 state 的解引用,风格上会更加可取。

0

评论者:pyr

嗨 @alexmiller,只使用 reductions-with 会更有意义,并且具有一致的行为。
我已经添加了第三个补丁,根据你的建议实现了它,避免了双重解引用。

0

评论者:sickill

顺便提一下,我已经在我的 ClojureScript 项目中使用 Pierre-Yves 的第三个补丁中的 reductions-with,它直接运行无需任何调整。

...