问题标签 [monoids]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
131 浏览

haskell - 任何可折叠的 Monoid

我正在尝试在 haskell 上创建一个 Monoid 的实例,该 Monoid 可适用于任何包含可比较元素并返回存储的最大值的可折叠结构。

到目前为止我有这个

它在列表中完美运行,但与 Trees 有一些问题。当我在 void list 上使用它时,它会返回

这就是我想要的,但是当我在没有元素的树上使用它时

但我希望它返回 Nothing 而只是 []。它不适用于没有子节点的节点,但它适用于有价值的节点

有什么建议吗?

PD:我正在使用 ghci 7.10

0 投票
1 回答
435 浏览

haskell - 当 foldr 与幺半群没有任何关系时, foldMap 怎么能做和 foldr 一样的事情呢?

foldr据我了解,foldMap可以用来定义彼此。但这怎么可能,因为后者使用幺半群,而前者却没有?我们能保证foldr工作的东西可以有一个幺半群吗?

0 投票
2 回答
518 浏览

haskell - 内函数为 Monoid

我正在尝试这个(出于学习目的):

期望id <> id等于id . id

但是,(id <> id) 1我收到此错误:

我应该改变什么来运行它?

这只是为了更好地理解 monoids 和 Haskell 类型类,而不是用于任何实际用途

0 投票
1 回答
572 浏览

haskell - 为什么 Monoid 不是 foldr/foldl 的要求?

我正在看FoldableHaskell 的课程。其中两个方法foldfoldMap需要一个 Monoid 实例。但是foldr或者foldl没有任何这样的约束。

为了foldr/的结果foldl是等价的,它不应该限制给定的折叠函数是关联的吗?有没有同一个列表中 foldr/foldl 的结果不同的例子?

Foldable 实例不应该包装 Monoidal 值吗?还是可折叠更通用?

0 投票
2 回答
2386 浏览

haskell - 如何编写半群实例?

问题

给定一个数据类型,实现 Semigroup 实例。这是我被赋予实现的数据类型: data Or a b = Fst a | Snd b deriving (Eq, Show, Num). 它应该像这样运行:

当我测试像> Fst "help" <> Fst "me"它一样的值时,它可以正常工作,但是当我测试其他值时,我得到了错误。当我尝试通过从错误中派生类来修复这些错误时,我会遇到更多错误。我在这里做错了什么?

我的代码

错误

当我尝试使用整数进行测试时,> Fst 1 <> Fst 2我得到:

当我尝试派生 Num 类时data Or a b = Fst a | Snd b deriving (Eq, Show, Num),我得到:

0 投票
1 回答
96 浏览

haskell - 邻接在实际使用中是什么意思?

在尝试理解某些概念时,我经常遇到“邻接”一词。这些东西对我来说太抽象了,因为我既不是领域专家也不是范畴论专家。

我发现的最简单的情况是一个Monoid Maybe a实例,它的行为通常与我有时对Nothing.

Wikipedia中我们可以了解到,通过将一个元素“邻接”到一个半群,我们可以获得一个不同的Monoid实例。我不明白这句话,但给出的方程式表明这正是我需要的(并且由于某种原因不是默认的):

任何半群 S 都可以简单地通过邻接不在 S 中的元素 e 并为所有 s ∈ S 定义 e • s = s = s • e 变成一个幺半群。

  • 至少在这种情况下,“相邻”是否与“添加”相同?
  • 这个概念还有其他简单的例子吗?
  • 什么是“左伴随”的最简单的可能实例?
0 投票
3 回答
663 浏览

haskell - Haskell:如何为依赖参数的东西编写“Monoid”实例

我正在为大学开发一个小型图书馆,该图书馆在循环组中进行整数计算;像:

'Integers (% n)'清楚地形成一个以'0 (% n)'作为单位元素的加法运算。然而,只有当两个被相加的操作数的模数相同时,加法才有意义:a (% n) + b (% n)有意义,而a (% n) + b (% m)没有。

有没有办法用 Haskell 的类型系统来强制执行这一点?恒等元素当然也是如此mempty:如何0 (% n)构造?可以n以某种方式保存在类型系统中吗?

或者像这样的结构是否需要使用依赖类型?

0 投票
2 回答
953 浏览

haskell - 折叠可能(Monoid)的可折叠,忽略 Haskell 中的缺失值

我正在处理一些缺少值的数据,这些数据仅表示为 Maybe 值列表。我想执行各种聚合/统计操作,这些操作只是忽略缺失值。

这与以下问题有关:

在haskell中总结Maybe Int列表的惯用方法

如何轻松地使用可能的幺半群并将值与自定义操作结合起来?

Nothing但是,如果缺少任何值,前一个问题就满足于返回,这在我的情况下不是一个选项。我有一个解决方案,其中涉及NumMaybe. 但是,这意味着它特定于加法和乘法,并且它也有一些其他问题。

基于此,我们可以这样做:

我喜欢这个:它给了我两个函数,一个 lenientsum'和一个 strict sum'',我可以根据需要从中选择。我可以使用相同的函数来汇总任何Num实例,因此我可以为列表重用相同的代码,而Maybe无需先转换它们。

我不喜欢这个:实例重叠。此外,对于除加法和乘法之外的任何操作,我必须指定一个新类型类并创建新实例。

因此,我想知道是否有可能以某种方式获得一个很好的通用解决方案,也许按照第二个问题中建议的思路,将其Nothing视为mempty有问题的操作。

有没有一种很好的惯用方式来做到这一点?

编辑:这是迄今为止最好的解决方案:

0 投票
1 回答
383 浏览

haskell - Monoid 如何协助并行训练?

HLearn的自述文件指出 Monoid 类型类用于并行批量训练。我trainMonoid在几个文件中看到过,但我很难剖析这个庞大的代码库。有人可以用初学者友好的术语解释它是如何工作的吗?我猜它与关联性属性有某种关系。

0 投票
1 回答
468 浏览

scala - 方法定义有什么问题

以下是我在 scala 中的方法签名和定义

但是,对于 reduce 的定义,我收到以下错误

不知道我哪里出错了。任何帮助,将不胜感激。

谢谢!