请在2024年Clojure现状调查!中分享您的想法。

欢迎!请参阅关于页面了解该工作的更多信息。

+2票数
转换器

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

建议

  • 具有显式初始化值的缩减转换器:reductions-with
  • 由于参数冲突,这是一个独立的功能,而不是与缩减结合

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

(assert (= (sequence (reductions-with + 0) [1 2 3 4 5]) [1 3 6 10 15])))

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

由以下人员预筛选: Alex Miller

16 答案

0票数

由:[email protected]发表的评论

建议的补丁通过调用无参数的功能来为缩减获取"init"值。我想要一个接受显式"init"而不是依赖于空一元(f)的"reductions"转换器。

如果我记得正确,Rich 对支持无初始化的 reduce(类似于 Common Lisp)表示了一些后悔。我的理解是,显式初始化对新 Clojure 代码来说更受欢迎。

不幸的是,对于转换器的一个显式初始化参数会与标准的“无初始化”缩减(链接:f coll)冲突。在我的代码中,我已将此转换器的名称用作“accumulations”。另一个可能的名字可能是“reductions-with”。

0票数

由:pyr发表的评论

嗨 Steve,

我非常希望显式初始化值也是明确的,不幸的是,除了在 2-arity 变体的第二个参数中进行测试(这可能会更令人困惑)之外,没有方法可以通过“reductions”来实现。

我喜欢提供“reductions-with”变体的想法,这个变体强制设置初始化值,如果需要,我很乐意对这个补丁进行扩展。

0票数

由:pyr发表的评论

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

0票数

由:pyr发表的评论

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

0票数

评论人:alexmiller

还没有时间查看,对不起。

0票数

由:pyr发表的评论

@alexmiller,如果结果是 clojure.spec,我会稍微花点时间来审查这个补丁 :-)

0票数

由:[email protected]发表的评论

对于测试,我建议您将转换器版本的输出与调用 sequence 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,谢谢您的及时回复。我正在努力确保,当反馈到来时,我能够迅速采取行动。 cheers!

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,它直接工作,无需任何调整。

...