请在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

嗨,Steve,

我非常希望初始化值也是显式的,不幸的是,除了在2元参数变体中测试第2个参数(这可能会更加混乱)之外,没有其他方法可以通过"reductions"来做到这一点。

我喜欢提供一个“with-reductions-”变体,该变体强制使用初始化值,如果需要,我很乐意增加补丁来实现这一点。

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 补丁对 init 的处理方式与当前 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

嗨 @alexmiller,只有reductions-with并且保持一致的行为,这更有意义。
我已经添加了第三个补丁,它根据您的推荐实现,避免了双重解引用。

0

评论者:sickill

通知:我已经在我的ClojureScript项目中使用了来自Pierre-Yves的第三个补丁中的reductions-with,并且它可以直接使用无需任何调整。

...