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

欢迎!请参阅关于页面,了解更多有关如何使用本网站的信息。

+2
转换器

当前,当使用1元参数调用时,减法操作不提供转换器。

建议

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

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

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

预审: Alex Miller

16 个答案

0

评论由:[email protected] 提出

建议的补丁通过在没有参数的情况下调用函数来获取reductions的"init"值。我想要一个"reductions"转换器,它可以显式地表示"init",而不是依赖于空元(f)。

如果我没有记错的话,Rich 对支持不带init的reduce(类似于Common Lisp)表示了一些遗憾。我的理解是,对于新的Clojure代码,显式init是首选。

遗憾的是,为转换器提供一个显式init参数将与传统"无init"reductions(链接: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] 提出

为了测试,我建议您将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的反转引用——鉴于我们这里所做的假设,这并不是错误的,但我认为在let中使用单个对state的反转引用从风格上会更加可取。

0

评论由:pyr 提出

嗨@alexmiller,只有使用reductions-with会更合理,并且具有一致的行为。
我已经添加了第三个补丁,按照你的建议实现了它,避免了双重反转。

0

评论人:sickill

通知:我在我的ClojureScript项目中使用了Pierre-Yves提供的第三个补丁中的reductions-with,它无缝工作,无需任何调整。

...