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

欢迎!请参阅关于页面获取有关如何操作的更多信息。

+2
转换器

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

建议

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

第二个补丁建议了一个允许显式初始化值的变体: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]发表的评论

建议的补丁通过在没有任何参数的情况下调用函数来获取reductions的"init"值。我想要一个显式"init"值的"reductions"转换器,而不是依靠空参数(f)。

如果我记得正确,Rich曾对支持没有init的reduce(类似于Common Lisp)表示过遗憾。我的理解是新编写的Clojure代码更喜欢显式的init。

不幸的是,对于转换器的显式init参数与标准的"无init" reductions(链接:f coll)会有冲突。在我自己的代码中,我已使用"accumpulations"作为此转换器的名称。另一个可能的名字可能是"reductions-with"。

0

由pyr发表的评论

嗨Steve,

我更希望init值是显式的,但不幸的是,除了对2个参数的变体中的第二个参数进行测试(这可能会更加令人困惑)之外,还有没有其他方法可以实现这一点。

我喜欢提供"reductions-with"变体的想法,我愿意根据需要增强补丁。

0

由pyr发表的评论

@Steve Miner 我增加了一个带有 reductions-with 的变体。

0

由pyr发表的评论

有什么我可以帮忙推动这个进展的吗?
@alexmiller 对代码本身有什么评论吗?

0

评论者:alexmiller

还没有机会查看,抱歉。

0

由pyr发表的评论

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

0

[email protected]发表的评论

为了测试,我建议您比较由 transducer 版本生成的输出与调用 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,感谢您的迅速回复。我正在确保在收到反馈时能在第一时间采取行动。干杯!

0

由pyr发表的评论

@alexmiller,是否有任何额外见解来评估这个功能是否有机会被采纳,或者我能否以任何方式调整/优化代码?

0

评论者:alexmiller

有机会时我将会预先检查它。

0

评论者:alexmiller

我认为我更喜欢reductions-with方法,而不是将重载到reductions中。

你在这里有两个对state的反引用@ -鉴于我们在这里做的假设,这并不错,但我认为将state的单次反引用放在let中从风格上会更加可取。

0

由pyr发表的评论

嗨 @alexmiller,只使用reductions-with,并具有一致的行为,这样做更有意义。
我已经增加了第三个补丁,按照您的建议实现了它,避免了双重反引用。

0

评论由:sickill做出

顺便说一下,我在我的ClojureScript项目中使用了Pierre-Yves的第三个补丁中的reductions-with,并且它不需要任何调整就能直接使用。

...