2024 Clojure 状态调查! 分享您的想法。

欢迎!请查看 关于页面 了解更多如何使用本服务的信息。

+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 对支持没有初始化的 reduce(类似于 Common Lisp)表示遗憾。我的理解是,对于新的 Clojure 代码,显式初始化更受欢迎。

不幸的是,对于转换器的显式初始化参数与标准 "无初始化" reductions(链接:f coll)会有冲突。在我自己的代码中,我已使用 "累积" 来命名这个转换器。另一个可能的名字可能是 "reductions-with"。

0

评论由:pyr 提出

史蒂夫,您好,

我非常希望初始化值也能明确地提供,遗憾的是,除了在2元变体的第二个参数上进行测试之外(这可能会更加令人困惑),使用简单的“reductions”没有方法做到这一点。

我很喜欢提供“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当前的方式处理初始化。

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中只看到状态的单一解引用会更符合风格。

0

评论由:pyr 提出

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

0

评论者:sickill

请注意,我在ClojureScript项目中使用了Pierre-Yves的第三版补丁中的reducers-with,并且它直接就绪,无需任何调整。

...