gpt4 book ai didi

clojure - 如何在 Clojure 中编写 monoid 协议(protocol)?

转载 作者:行者123 更新时间:2023-12-02 11:44:29 25 4
gpt4 key购买 nike

由于显而易见的原因,以下内容不起作用。

(defprotocol Monoid
(mappend [a b])
(mzero []))

mzero 具有零参数,并且协议(protocol)中不允许(或没有意义)零参数方法。在 Haskell 或 Scala 中,调度是基于类型而不是基于值,这不是问题。

在 Clojure 中概念化和编写 Monoid 协议(protocol)的正确方法是什么?

最佳答案

查看source ,这是在 new reducers library 中实现的方式不是一个协议(protocol),而是一个重载函数。无参数调用是 mzero;两个args调用是mappend。

更准确地说,monoid 接受两个参数 - opctor 并返回一个函数,当不带参数调用时,该函数会计算 >ctor,当用两个调用时,委托(delegate)给 op

这与折叠中处理零的方式一致,例如 - reduce(折叠)将在没有参数的情况下评估正在折叠的函数以找到零(如有必要)。

我对展示如此平淡无奇的东西感到有点羞愧,但我不知道如何在 clojure 中做得更好。感谢评论中的解释/教育。

关于clojure - 如何在 Clojure 中编写 monoid 协议(protocol)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10767793/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com