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

欢迎!请参阅 关于 页面以了解更多关于如何使用此功能的信息。

+2
变换器

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

建议

  • 具有显式初始化值的reductions变换器:reductions-with
  • 由于arity冲突,这是一个独立的函数,而不是与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" 值。我希望有一个 "reductions" 变换器,它取一个显式的 "init" 而不是依赖于一个无参数 (f)。

如果我记得正确的话,Rich 表示他对支持没有初始化的 reduce (ala Common Lisp) 表示一些遗憾。我的理解是,对于新的 Clojure 代码,显式初始化更受欢迎。

不幸的是,变换器的显式初始化参数与标准的 "无初始化" reductions (链接:f coll) 产生冲突。在我的代码中,我已经使用 "accumulations" 为这个变换器命名。另一个可能的名字可能是 "reductions-with"。

0

评论者:pys

嗨史蒂夫,

我更希望初始化值是显式的,不幸的是,除了用2个参数的变种测试第二个参数之外(这可能会更令人困惑),没有其他方式可以用 "reductions" 来做这件事。

我喜欢提供 "reductions-with" 变体的想法,如果需要,我很乐意为此补丁增加它。

0

评论者:pys

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

0

评论者:pys

我能帮些什么来推进这个项目吗?
@alexmiller 对代码有什么评论吗?

0

评论者:alexmiller

还没时间看它,抱歉。

0

评论者:pys

@alexmiller,如果结果是 clojure.spec,我会花时间仔细审查。

0

评论者:[email protected]

为了测试,我建议您将 transducer 版本的输出与调用 sequence reductions 的类似输出的结果进行比较。例如,

`

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

`

我希望看到相等性保持不变。0002 补丁在处理 init 方式上与当前 Clojure reductions 不同。

0

评论者:pys

@alexmiller 我又推送了一下,至少能感知一下补丁和 reductions-with 变体,因为 1.9 看起来越来越接近发布。

0

评论者:alexmiller

抱歉,我不知道我何时能处理这个问题,也不知道它是否会考虑在1.9版本中。我也不知道它不会,只是...我不知道。

0

评论者:pys

@alexmiller,感谢您的及时回复。我正在尝试确保在反馈到来时我在场,以便能够迅速采取行动。加油!

0

评论者:pys

@alexmiller,是否有任何额外的见解表明这个项目有机会被采纳,或者我是否能以任何方式调整/完善代码呢?

0

评论者:alexmiller

我将在有机会的时候尝试预审它。

0

评论者:alexmiller

我觉得我更喜欢reductions-with方法,而不是将它们重载到reductions中。

你有两个对@state的操作符减,这在这里的假设下并没有错误,但我认为在let中看到一个单一的状态操作符会更有风格。

0

评论者:pys

嗨 @alexmiller,只有一个reductions-with,并保持一致的行为会更有意义。
我已添加第三个补丁,按照您的建议实现,避免了双重解引用。

0

评论者:sickill

仅供参考,我已经在ClojureScript项目中使用了来自Pierre-Yves的第三个补丁中的reductions-with,并且它直接工作,无需调整。

...