从 Finger Tree 文章中查找丢失的“Reduce”类型类

2024-03-18

昨天的维基百科 http://www.urbandictionary.com/define.php?term=Wikibender开始于这个计算器问题 https://stackoverflow.com/questions/8428554/what-is-the-comonad-typeclass-in-haskell在 Comonads 上结束于MarkCC's http://scientopia.org/blogs/goodmath/about-markcc/文章关于手指树 http://scienceblogs.com/goodmath/2010/04/finger_trees_done_right_i_hope.php.

他在文章中大量使用了Reduce类型类。他写到这个类型类就好像它是一个非常常见且经常使用的库,但我在 hackage 上找不到它,也找不到足够的文档来真正理解代码。

有人可以帮助我理解什么吗Reducetypeclass 正在做什么,如何(-<) and (>-)运算符可以工作,并且应该告诉我有关文章中的代码的什么信息(复制如下)?


代码清单来自手指树做得对(我希望) http://scienceblogs.com/goodmath/2010/04/finger_trees_done_right_i_hope.php:

清单 1:Node 的实例声明

instance Reduce Node where
  reducer (-<) (Node2 a b) z = a -< (b -< z)
  reducer (-<) (Node3 a b c) z = a -< (b -< (c -< z))
  reducer (>-) (Node2 b a) = (z >- b) >- a
  reducer (>-) (Node3 c b a) = ((z >- c) >- b) >- a

清单 2:FingerTree 的实例声明

instance Reduce FingerTree where
  reducer (-<) Empty zero = zero
  reducer (-<) (Single x) zero = x -< zero
  reducer (-<) Deep left mid right zero = left -<' (mid -<'' (right -<' zero))
    where (-<') = reducer (-<)
          (-<'') = reducer (reducer (-<))
  reducel (>-) zero Empty = zero
  reducel (>-) zero (Single x) = zero >- x
  reducel (>-) zero (Deep left mid right) = ((zero >-' left) >-'' mid) >-' right
    where (>-') = reducel (>-)
          (>-'') = reducel (reducel (>-))

清单 3:数据类型

data Node s = Node2 s s | Node3 s s s

data FingerTree a = Empty
  |  Single a
  | Deep (Digit a) (FingerTree (Node a)) (Digit a)

data Digit a = [ a ]

鉴于reduce是“折叠”函数的常见替代名称,我猜它类似于the Foldable类型类别 http://hackage.haskell.org/packages/archive/base/4.4.1.0/doc/html/Data-Foldable.html#t:Foldable。实例定义本身似乎也有意义。

The Foldable类可以仅使用定义foldr,它具有类型签名foldr :: (Foldable t) => (a -> b -> b) -> b -> t a -> b,而reducer该代码似乎是reducer :: (Reduce t) => (a -> b -> b) -> t a -> b -> b。除了不同的参数顺序之外,它的工作原理应该是相同的。

请注意,运算符只是函数的参数——您可以将它们全部替换为f或另一个类似的通用标识符。使用运算符作为二元函数参数的名称......是一个稍微不寻常的选择,但我猜它确实强调了折叠结构的某些方面。

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

从 Finger Tree 文章中查找丢失的“Reduce”类型类 的相关文章

  • Haskell - 用防护罩替换外壳

    我想知道在这部分代码中是否可以用守卫替换 case 语句 firstFunction String gt Maybe MyType secondFunction MyType gt Integer myFunction String gt
  • Haskell,堆栈:找到可执行文件

    我正在寻找类似的东西 stack whereis hasktags where whereis行为或多或少类似于 UNIXwhereis命令 hasktags是这样运行的 stack exec hasktags stack exec whe
  • 以下两个 lambda 函数的空间复杂度

    我正在阅读以下内容 https en wikibooks org wiki Haskell Graph reduction https en wikibooks org wiki Haskell Graph reduction 其内容如下
  • 简单 Haskell Monad - 随机数

    我正在尝试扩展代码这个帖子 https stackoverflow com questions 3944170 haskell and state 接受的答案 允许我能够基于以种子作为参数的函数 randomGen 调用 randomGen
  • 用于遇到 [...] 的 Haskell Parsec 解析器

    我正在尝试使用 Parsec 在 Haskell 中编写一个解析器 目前我有一个可以解析的程序 test x 1 2 3 end 执行此操作的代码如下 testParser do reserved test v lt identifier
  • 有没有更好的方法将 UTC 时间转换为大纪元时间?

    我想将文件的修改时间设置为从 exif 数据获取的时间 为了从 exif 获取时间 我发现 Graphics Exif getTag Exif gt String gt IO Maybe String 要设置文件修改时间 我发现 Syste
  • 为什么 ZipList 不是 List 的默认应用实例

    我目前正在学习 Haskell 中的应用程序 如果我没记错的话 列表有两个不同的应用实例 List and ZipList 第二个被定义为包装列表值的新类型 这ZipList应用实例对我来说似乎更直观 这可能是一个愚蠢的问题 但有具体原因吗
  • Haskell:不在范围内:数据构造函数

    今天开始在学校学习 haskell 我遇到了函数问题 我不明白为什么它不在范围内 代码如下 ff Char gt Char gt Char ff A B x 0 y 1 x lt A y lt B x 1 y 0 和错误 md31 hs 2
  • 如何在Haskell中实现词法分析器和解析器

    我在这里得到了这段代码 它是用Haskell结构的命令式编程语言编写的程序 所以问题是 我如何为这种语言实现词法分析器和解析器 该程序被定义为一系列语句有 6 种类型 goto write stop if goto 和 int int n
  • 如何打乱列表?

    如何从一组数字 1 2 3 直到我击中x 我的计划是重新调整列表 1 2 3 并把它砍在x chopAt 3 2 3 1 2 3 chopAt 3 2 1 3 2 1 3 chopAt 3 3 1 2 3 chopAt chopAt x y
  • 如何更换HXT中的节点?

    给定一个示例 xml 文件
  • 关于“没有绑定的类型签名”的错误

    我在 Haskell 中遇到 ASCII 问题 fromEnum Char gt Int toEnum Int gt Char offset Int offset fromEnum A fromEnum a toUpper Char gt
  • 构造微积分中的“Refl”东西?

    在语言中 例如Agda Idris or Haskell对于类型扩展 有一个 键入类似于以下内容的内容 data a b where Refl a a a b意思是a and b是相同的 这样的类型可以定义在结构演算 https en wi
  • Haskell:需要了解 Functor 的签名

    有人能给我解释一下 Functor 的签名吗 Prelude gt info Functor class Functor f gt where fmap a gt b gt f a gt f b lt a gt f b gt f a 我不明
  • 在 Haskell 中获取玫瑰树的根

    最近我开始学习 Haskell 并在以下练习中遇到困难 Write functions root Rose a gt a and children Rose a gt Rose a that return the value stored
  • Haskell 点运算符

    我尝试在 Haskell 中开发一个简单的平均函数 这似乎有效 lst 1 3 x fromIntegral sum lst y fromIntegral length lst z x y 但是为什么下面的版本不行呢 lst 1 3 x f
  • Haskell Fibonacci 达到最大指定数?

    我有一个已启动并正在运行的 Haskell 函数 但它做错了事情 它应该输出最多指定最大数量的斐波那契数列 像这样 fibonacciSequence 86 1 1 2 3 5 8 13 21 33 54 我的代码当前输出斐波那契数列中的前
  • Haskell 中的所有内容都存储在 thunk 中吗,甚至是简单的值?

    以下值 表达式 函数的 thunk 在 Haskell 堆中是什么样子的 val 5 is val a pointer to a box containing 5 add x y x y result add 2 val main prin
  • 你将如何在 Haskell 中(重新)实现迭代?

    iterate a gt a gt a gt a 你可能知道 iterate是一个接受函数和起始值的函数 然后它将函数应用于起始值 然后将相同的函数应用于最后的结果 依此类推 Prelude gt take 5 iterate 2 2 2
  • Haskell 中多核编程的现状如何?

    Haskell 中多核编程的现状如何 现在有哪些项目 工具和库可用 有哪些经验报道 2009年至2012年期间 发生了以下事件 2012 从 2012 年开始 并行 Haskell 状态更新开始出现在并行 Haskell 摘要 http w

随机推荐

  • 可移植类库反射

    我目前正在尝试将 Xamarin iOS 应用程序库转换为 PCL 配置文件 78 我有这段代码无法编译 public static void RegisterAllCommandHandlers IEnumerable
  • 加速 jQuery AutoComplete(不可避免的长列表)

    今天下午早些时候 我开始了加速 jQuery 自动完成的旅程 并认为开始可能是个好主意内存缓存一切 正如本文所建议的 加快自动完成速度 https stackoverflow com questions 5820741 jquery ui
  • 证明对于以下每个,g(n) 都是 O(g(n)) [关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 2 sqrt log n is O n 4 3 n 4 3 is O n log n 3 n log n 3 is O n log n
  • Android 上具有多个模块的 Firebase 推送通知

    我目前正在尝试在我们的应用程序中实现推送通知 所以我们有三个模块 App 1 Logic App 2 我显然给了他们名字 应用程序 1 和 2 依赖于逻辑模块 该模块包含两个应用程序的所有逻辑 现在 我希望向登录应用程序 1 或应用程序 2
  • 如何保存动态创建的文本框及其值

    我正在开发一个需要保存动态创建的文本框的项目 我需要在第二次运行应用程序时显示文本框的数据 这是我的代码 public partial class Form1 Form public Form1 InitializeComponent st
  • JavaScript 提交期间未传递 URL 参数

    我正在尝试从 javascript 提交表单 表单已提交 但参数未传递 下面是我的代码
  • Mongocxx 无法使用 SSL 连接到 mongoDB

    我完成了以下教程 https medium com rajanmaharjan secure your mongodb connections ssl tls 92e2addb3c89 https medium com rajanmahar
  • 什么是更新每用户系统参数?

    在我的服务中 我需要在更改登录屏幕保护程序超时后发出 刷新 在做研究的同时 我不断地寻找参考资料 http social technet microsoft com Forums windows en US c5979d78 9732 41
  • 通过 Javascript 访问 Twitter

    我正在构建一个通过以下方式使用 twitter 的网络应用程序 1 用户可以使用 Twitter 登录 即用户对应用程序进行身份验证和授权 我得到以下内容 我存储到服务器的 oauth token secret OAUTH TOKEN SE
  • Android:使用java反射更改私有静态最终字段

    使用 Java 反射更改私有静态最终字段 https stackoverflow com questions 3301635 change private static final field using java reflection 我
  • 将 Web Workers 捆绑为 npm 包的组成部分,并具有单个文件 Webpack 输出

    我正在编写一个 npm 包 它是流行库 leafletjs 的插件 我正在使用 webpack 来捆绑包 我希望这个包能够根据命令生成和销毁一些网络工作者 Web Worker 代码是我的源文件的一部分 但我希望能够将我的包作为 npm 模
  • Python Pandas,仅在特定时间重新采样

    我的 pandas 版本是 0 18 我有一个如下所示的分钟数据 Time 2009 01 30 09 30 00 85 11 100 11 2009 01 30 09 39 00 84 93 100 05 2009 01 30 09 40
  • 在 Redshift 中创建后如何更改表架构?

    Postgresql 支持此操作 如下所示 ALTER TABLE name SET SCHEMA new schema 该操作在 Redshift 中不起作用 有什么办法可以做到这一点吗 我尝试更新 pg class 来为表设置 reln
  • 我只是“移动”图像,它的元数据就会改变......

    我只是复制了图像并将其保存到当前目录中的另一个临时文件夹中 没有任何修改 但图像占用了更多 磁盘空间 比它 字节大小 和 当我这样做时 我只丢失了大部分图像的元数据 例如位置数据 设备型号 F 号等Color space Alpha cha
  • 如何将 Google 地图标记保持在地图中心而不出现延迟?

    当用户拖动相机时 我试图在地图中心保留一个标记 我目前正在使用 OnCameraChangeListener 来执行此操作 如下所示 Override public void onCameraChange CameraPosition po
  • 如何写入 OpenGL 深度缓冲区

    我正在尝试实现一种老式技术 其中使用渲染的背景图像和预设深度信息来遮挡场景中的其他对象 因此 例如 如果您有一张房间的图片 前景中的天花板上悬挂着一些电线 则这些电线会在深度图中给出浅深度值 并且在正确渲染时 允许角色在电线 后面 行走 但
  • Chart.js 响应式条形图标签大小调整

    所以我有一个使用 Chart js 的条形图 并且启用了响应式功能 它似乎适用于某些图表 但不适用于其他图表 例如 我的条形图标签似乎没有随窗口调整大小 但其他所有内容都会使整个图表在较小的窗口尺寸下看起来非常奇怪 如何重新调整标签大小以使
  • sed 或 awk 替换块中的行

    输入文件包含 abc para1 123 para2 456 para3 111 pqr para1 333 para2 765 para3 1345 xyz para1 888 para2 236 para3 964 shell脚本的要求
  • 获取 UTC 时间戳[重复]

    这个问题在这里已经有答案了 如何在 JavaScript 中获取当前 UTC 时间戳 我想这样做 这样我就可以从客户端发送独立于时区的时间戳 new Date getTime 有关更多信息 请参阅 詹姆斯 麦克马洪的回答 https sta
  • 从 Finger Tree 文章中查找丢失的“Reduce”类型类

    昨天的维基百科 http www urbandictionary com define php term Wikibender开始于这个计算器问题 https stackoverflow com questions 8428554 what