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

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

+2投票
变换器

调用时,如果使用1个参数,减少目前不提供变换器。

提议

  • 显式初始化值的主要减少变换器:reductions-with
  • 由于参数冲突,这是一个单独的函数,而不是与reductions组合

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

(断言(=(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]

建议的补丁通过调用不带参数的函数来通过reduce获取"init"值。我希望有一个显式"init"作为参数的"reductions"变换器,而不是依赖于nullary(f)。

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

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

0投票

评论者:pyr

你好,Steve,

我非常希望初始化值也能显式表示,很不幸,除了测试2-参数变体的第二个参数(这可能会更令人困惑)之外,没有其他方法可以用普通的"reductions"来实现。

我喜欢提供"reductions-with"变体的想法,这个变体强迫用户提供初始化值,如果需要的话,我很乐意增加补丁。

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补丁没有用与当前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,并且它直接工作,无需任何调整。

...