欢迎!请查看关于页面了解更多此工作方法的信息。
当前在使用1参数调用时,简化的变送器未提供。
建议
第二个补丁建议了一个允许显式初始化值的变体:reductions-with
(assert (= (sequence (reductions-with + 0) [1 2 3 4 5]) [1 3 6 10 15])))
补丁: 0003-add-reductions-with.patch
审核:Alex Miller
评论由:[email protected] 发布
这个补丁通过不带参数调用函数来获取Reducings的"init"值。我想要一个接受显式"init"的"reductions"变送器,而不是依赖于空参数(f)。
如果我没有记错,Rich 表示对支持不带初始化的reduce(类似于Common Lisp)表示遗憾。我的理解是,显式初始化值更适合新编写的Clojure代码。
不幸的是,变送器的显式初始化参数将与标准的"无初始值"REDUCES(链接:f coll)冲突。在我自己的代码中,我已使用"accmulation"作为这个变换器的名称。另一个可能的名字可能是"reductions-with"。
评论是由:pyr 发布
嗨,Steve,
我很希望显式初始化值也是明确的。不幸的是,除了对二参数变体中的第二个参数进行测试——这可能会更加混乱,没有使用普通的"reductions"来做。
我喜欢提供一种“带reductions-with”变体,它强制使用初始化值,如果需要的话,我很乐意增加此补丁以包含该变体。
@Steve Miner 我已添加了一个带有reductions-with的变体。
我能做些什么来推动这个项目的进展吗?@alexmiller 对代码本身有什么意见吗?
评论者:alexmiller
我还没机会查看,抱歉。
@alexmiller,如果结果是得到clojure.spec,我会花点时间来审查这个补丁的。
对于测试,我建议你比较转置版本与调用序列reductions的输出的差异。例如,
`
(is (= (reductions + 3 (range 20)) (sequence (reductions-with + 3) (range 20)))
我希望看到这种一致性。0002补丁没有像当前Clojure reductions那样处理init。
@alexmiller 我再试着推动一下,至少对补丁和reductions-with变体有一个大概的了解,因为1.9看起来即将发布。
抱歉,我不知道我能否很快完成它,或者它是否会被考虑进入1.9。我也不知道它是否不会,只是……不知道。
@alexmiller,感谢您迅速回复。我正在确保我在反馈到来时能够及时作出反应。干杯!
@alexmiller,是否有关于这个代码是否有可能被接受或者我如何改进和完善的任何额外的洞察?
有机会我将尝试进行预筛选。
我认为我更喜欢reductions-with方法,而不是overloading到reductions中。
您有两个@state的反引用。在我们这里设定的假设下,这并没错,但我认为在let中只进行一次state的反引用的风格会更好。
嗨 @alexmiller,只有 reductions-with 并且行为一致更有意义。我已经添加了第三个补丁,按照您的建议实现,避免双重反引用。
评论者:sickill
内部信息,我已经在我的ClojureScript项目中使用Pierre-Yves的第三个补丁中的reductions-with,并且它直接使用了,没有任何调整。