如何在 Clojure 中编写 monoid 协议?

2024-01-02

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

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

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

概念化和写作的正确方法是什么MonoidClojure 中的协议?


看着source https://github.com/clojure/clojure/blob/89e5dce0fdfec4bc09fa956512af08d8b14004f6/src/clj/clojure/core/reducers.clj#L279,这是在新的减速器库 http://clojure.com/blog/2012/05/08/reducers-a-library-and-model-for-collection-processing.html不是一个协议,而是一个重载函数。无参数调用是 mzero;两个args调用是mappend。

更准确地说,monoid有两个参数 -op and ctor并返回一个函数,当不带参数调用时,该函数的计算结果为ctor,当有两个人一起调用时,代表op.

这与折叠中处理零的方式一致,例如 -reduce如有必要, (fold) 将评估不带参数的折叠函数以找到零。

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

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何在 Clojure 中编写 monoid 协议? 的相关文章

  • 在 F# 中组合谓词

    F 中是否有逻辑组合谓词的标准方法 例如 假设我有isCar x and isBlue x然后我想要一些能给我的东西 let isBlueCar x isCar x isBlue x 但是使用某种组合而不是调用 可能像 let isBlue
  • 如何创建惰性序列向量

    运行它按预期工作 defn long seq n lazy seq cons list n somekey n 2 long seq n 1 take 3 long seq 3 gt 3 somekey 6 4 somekey 8 5 so
  • 阻塞事件循环

    我正在通过 Nodeschool 参加 函数式 Javascript 研讨会 其中一项练习的标题是 阻止事件循环 我很难理解它 通过过去的练习 我确保真正尝试理解解决方案 这样如果我必须重做问题 我就会理解如何解决它 而不是第一次就破解它
  • Clojure/Java:用于声音频谱分析的 Java 库? [关闭]

    Closed 此问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 我正在寻找一个可以接受大量音频数据并返回给定频带内随时间变化的平均幅度的库 我已经在 comp dsp
  • Kotlin 的不同类型的 reduce() 函数

    我正在查看数组扩展函数并发现reduce one inline fun
  • 从 JVM 线程本地空间卸载 Clojure 变量

    我正在 Clojure 中为 BaseX 编写一个插件 通过 lein uberjar 构建 并包含 Clojure 解释器 在大多数情况下 这效果很好 然而 当通过 BaseX HTTP 实例运行时 评估在 Jetty 的线程池内进行 而
  • Leiningen 中的本地依赖项无需创建 Maven 存储库?

    我正在构建一个 Compojure Web 应用程序 我希望它使用我编写的另一个 Clojure 项目中的函数 我对 Maven 一点也不熟悉 据我所知 它的学习曲线非常陡峭 很遗憾 一切 https stackoverflow com q
  • 在自己的定义中使用变量?

    无限流 val ones Stream Int Stream cons 1 ones 一个值怎么可能在它自己的声明中使用呢 看起来这应该会产生编译器错误 但它确实有效 它并不总是递归定义 这实际上有效并产生 1 val a Int a 1
  • 纯函数可以异步吗?

    在浏览纯函数的定义时 它通常定义有两个特征 1 给定相同的输入应该产生相同的输出 2 不应产生任何副作用 这是否也意味着纯函数不应该是异步的 如果不是 怎么会这样 如果是的话 我很想看到 JavaScript 中异步纯函数的一些示例 是的
  • 我应该选择哪种函数式编程语言作为第一种函数式编程语言? [关闭]

    Closed 这个问题是基于意见的 help closed questions 目前不接受答案 我想学习一种函数式编程语言 以了解不同的编程范例 我的编程背景 Java 我刚刚通过了 SCJP 考试 一些 ruby 和非常有限的 Rails
  • 函数式编程是否需要新的命名约定?

    我最近开始使用 Haskell 学习函数式编程 并在 Haskell 官方 wiki 上发现了这篇文章 如何阅读哈斯克尔 http www haskell org haskellwiki How to read Haskell What t
  • Clojure:生成所有键盘可输入字符

    Context 我想生成可以通过以下方式生成的所有字符 打开记事本 按键盘上的单个键 按住 Shift 按键盘上的单个键 我目前拥有的 concat range int a int z range int A int Z range int
  • “foop”:命名约定?它是“foo”的辅助递归函数;后缀“p”是什么意思?

    我遇到了以下代码片段 函数定义 choose x xs choosep x xs where choosep x x choosep x x choosep x xs choosep x xs in 柯里编程语言 http en wikip
  • Swit 中的函数式编程将数组元素分配到正确的“桶”

    我是函数式编程的新手 我的问题是我有一个主数组和固定数量的 目标 数组 我想根据每个元素的特定值将主数组中的元素分配到正确的结果数组中 我猜测一种方法是使用一个映射函数来遍历主数组元素 确定正确的 目标数组 值 基于某种逻辑 然后将元素添加
  • Clojure读行函数问题

    我试图在我的 Clojure 程序中获取控制台输入 但是当它到达程序的该部分时它给我这个错误 Exception in thread main java lang ClassCastException clojure lang LineNu
  • Emacs/Swank/Paredit for Clojure 的温和教程

    我要转向 Emacs 来工作Clojure http en wikipedia org wiki Clojure Lisp 为了能够执行以下操作 我需要在 Emacs 上设置哪些信息 自动匹配 生成相应的右括号 自动缩进 Lisp Cloj
  • 可以混合使用 JVM 语言吗?即:Groovy 和 Clojure

    我知道你可以轻松地混合groovy java clojure java 无论什么JvmLang java 这是否也意味着我也可以让 clojure 和 groovy 代码进行交互 如果我使用 Grails 或 jRoR 我也可以在该环境中使
  • F# 编码练习

    我一直在 Visual Studio 2010 中涉足 F 我是一名在 C 和 Java 等面向对象语言方面拥有更多代码 架构设计经验的开发人员 为了扩展我的技能并帮助做出更好的决策 我正在尝试使用不同的语言来做不同的事情 特别是掌握使用函
  • 在依赖类型的函数式编程语言中,扁平化列表是否更容易?

    在 haskell 中寻找一个可以展平任意深度嵌套列表的函数时 即应用的函数concat递归并在最后一次迭代时停止 使用非嵌套列表 我注意到这需要有一个更灵活的类型系统 因为随着列表深度的变化 输入类型也会变化 确实 有几个 stackov
  • “功能性”Rust 对性能有哪些影响?

    我正在关注 Rust 轨道运动 io https exercism io 我有相当多的 C C 经验 我喜欢 Rust 的 功能 元素 但我担心相对性能 我解决了 行程编码 问题 https exercism io tracks rust

随机推荐

  • 无法选择 id=":1" 的 div

    对网络东西有点菜鸟 但我有一个带有此标签的 div div class 我已经测试过我的 jQuery 可以正常工作 当前使用版本 2 1 3 我已经测试了许多其他关于选择器中冒号的 SO 帖子中推荐的选择器 然后是其他一些 我已经分别尝试
  • ruby - 如何在 minitest 示例中使用标签

    I have require minitest spec require minitest autorun require minitest tags require rspec expectations describe One happ
  • 在一行中多次使用相同模式的正则表达式

    我正在寻找的模式是这样的 TXT txt 该模式可以在任何给定行中多次出现 我想要么提取模式的每个实例 要么使用 sed 或其他任何东西 删除每个实例周围的文本 Thanks 您可以将 Perl 用作 cat file foo TXT1 t
  • 如何在 Xcode 7 中使用对象库的堆栈视图

    我最近安装了Xcode 7 测试版并发现了一些东西new在对象库中 例如 水平堆栈视图和垂直堆栈视图 当我在其中放入一些控件时 stackview 似乎可以调整大小 根据控制尺寸 当我呈现更多控制堆栈时 似乎从堆栈视图开始自动调整 任何一个
  • 获取os.Error值的一种方法——字符串值(Go)

    如何获取字符串值os Error 也就是说 分配给一个变量 例如 package main import errors fmt func main err errors New an error message s err Error fm
  • Laravel: array_merge(): 参数 #2 不是数组错误

    异常开始出现在所有视图中 当我尝试运行时composer update 它总是以 error type ErrorException message array merge Argument 2 is not an array file l
  • ArrayList#size() 大于对象的实际数量

    我的 Android 应用程序中有一个 ArrayList 其中有 2 个项目 然而 它的 size 方法返回 3 我知道这听起来非常简单和愚蠢 但它是这样的 为什么会出现这种情况呢 ArrayList 的大小如何返回错误的数字 当我迭代列
  • 无需数据库即可存储数据?

    如果我想存储电子邮件 但没有数据库 例如 MySQL 我该怎么办 数据应该可以从 PHP 访问和写入 但常规 访问者 不得看到该数据 希望你能帮忙 您可以将它们放入文件中 data Defined somewhere file put co
  • 优先 Web SDK 与 REST API

    使用 Priority 的新工具开发网站时 在哪些情况下使用 Web SDK 访问 Priority 会比使用 REST API 更好 反之亦然又如何呢 这取决于您的需求 REST API 主要用于与其他应用程序集成 而 WEB SDK 用
  • 在 Mercurial 中指定点作为修订版

    我发现一些 Mercurial 命令的修订版被指定为点 例如 hg revert all r hg update C r hg pull r 这个点的含义是什么 它对应哪个版本 hg help revisions says 保留名称 指示工
  • 在 AngularJS 应用程序中预填充远程数据的最佳方法

    在我的 AngularJS 应用程序中 我需要从远程 REST 端点检索多个静态数据集合 这些数据集合将作为静态查找列表在整个应用程序生命周期中使用 我希望所有这些列表都在初始应用程序启动时填充 并保留并可供多个控制器使用 我不想动态加载任
  • 如何导出驻留在给定 Domino 服务器上的数据库列表?

    我有一台 Lotus Domino 服务器 上面有数量惊人的 Domino 数据库 排列在各个文件夹中 是否有某种方法可以以某种电子表格格式导出所有这些数据库及其标题和创建者姓名的列表 我拥有 Domino Admin 和 Domino D
  • 开发多个 Visual Studio 2010 扩展

    我正在单独的解决方案中开发几个独立的 Visual Studio 扩展 当我打开其中一个并在调试器中启动实验实例时 其他解决方案 未打开 的其他扩展也会被加载 必须有一种方法可以一次仅在实验实例中启动一个扩展 特别是您当前正在开发的扩展 对
  • Java中如何将字符串转换为函数?

    stackoverflow上有一个类似标题的问题here https stackoverflow com questions 41283897 how to convert string into math function just on
  • 如何在 Rust 中构建多工作区货物项目

    我有多工作空间 Cargo 项目 它有两个工作区 common and server common is a lib项目和服务器是bin项目 该项目在Github中的位置是here https github com rajcspsg mul
  • Spark 2.1.0中读取大文件时出现内存不足错误

    我想使用 Spark 将大型 51GB XML 文件 在外部 HDD 上 读取到数据帧中 使用Spark XML 插件 https github com databricks spark xml 进行简单的映射 过滤 重新排序 然后将其作为
  • 如果您想创建模块化应用程序,最好的资源是什么? [关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 在我对 Drupal Wordpress 和 Salesforce 等较新的 Web 平台 应用程序的
  • 三星 Galaxy S 上的图标背景?如何改变这个?

    我看到三星 Galaxy S 设备上的启动图标添加了背景 我需要将此背景更改为我们创建的自定义背景 我知道这可以改变 因为像 每日简报 这样的应用程序有自己的云状背景 使启动图标看起来非常丰富 如果有人知道如何更改此背景 请告诉我 看一下图
  • UICollectionView 顶部和侧面的浮动标题

    如何在 a 中实现标头UICollectionView 我知道您可以放入补充视图 但我不知道如何使它们 浮动 在部分上方 例如标题中的标题UITableView do 这是我的情况 我有一个collectionView单元格以网格格式布局
  • 如何在 Clojure 中编写 monoid 协议?

    由于显而易见的原因 以下内容不起作用 defprotocol Monoid mappend a b mzero mzero有零参数 并且协议中不允许 或没有意义 零参数方法 在 Haskell 或 Scala 中 调度是基于类型而不是基于值