问题标签 [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.
haskell - 任何可折叠的 Monoid
我正在尝试在 haskell 上创建一个 Monoid 的实例,该 Monoid 可适用于任何包含可比较元素并返回存储的最大值的可折叠结构。
到目前为止我有这个
它在列表中完美运行,但与 Trees 有一些问题。当我在 void list 上使用它时,它会返回
这就是我想要的,但是当我在没有元素的树上使用它时
但我希望它返回 Nothing 而只是 []。它不适用于没有子节点的节点,但它适用于有价值的节点
有什么建议吗?
PD:我正在使用 ghci 7.10
haskell - 内函数为 Monoid
我正在尝试这个(出于学习目的):
期望id <> id
等于id . id
但是,(id <> id) 1
我收到此错误:
我应该改变什么来运行它?
这只是为了更好地理解 monoids 和 Haskell 类型类,而不是用于任何实际用途。
haskell - 为什么 Monoid 不是 foldr/foldl 的要求?
我正在看Foldable
Haskell 的课程。其中两个方法fold
,foldMap
需要一个 Monoid 实例。但是foldr
或者foldl
没有任何这样的约束。
为了foldr
/的结果foldl
是等价的,它不应该限制给定的折叠函数是关联的吗?有没有同一个列表中 foldr/foldl 的结果不同的例子?
Foldable 实例不应该包装 Monoidal 值吗?还是可折叠更通用?
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)
,我得到:
haskell - 邻接在实际使用中是什么意思?
在尝试理解某些概念时,我经常遇到“邻接”一词。这些东西对我来说太抽象了,因为我既不是领域专家也不是范畴论专家。
我发现的最简单的情况是一个Monoid Maybe a
实例,它的行为通常与我有时对Nothing
.
从Wikipedia中我们可以了解到,通过将一个元素“邻接”到一个半群,我们可以获得一个不同的Monoid
实例。我不明白这句话,但给出的方程式表明这正是我需要的(并且由于某种原因不是默认的):
任何半群 S 都可以简单地通过邻接不在 S 中的元素 e 并为所有 s ∈ S 定义 e • s = s = s • e 变成一个幺半群。
- 至少在这种情况下,“相邻”是否与“添加”相同?
- 这个概念还有其他简单的例子吗?
- 什么是“左伴随”的最简单的可能实例?
haskell - Haskell:如何为依赖参数的东西编写“Monoid”实例
我正在为大学开发一个小型图书馆,该图书馆在循环组中进行整数计算;像:
'Integers (% n)'清楚地形成一个以'0 (% n)'作为单位元素的加法运算。然而,只有当两个被相加的操作数的模数相同时,加法才有意义:a (% n) + b (% n)
有意义,而a (% n) + b (% m)
没有。
有没有办法用 Haskell 的类型系统来强制执行这一点?恒等元素当然也是如此mempty
:如何0 (% n)
构造?可以n
以某种方式保存在类型系统中吗?
或者像这样的结构是否需要使用依赖类型?
haskell - 折叠可能(Monoid)的可折叠,忽略 Haskell 中的缺失值
我正在处理一些缺少值的数据,这些数据仅表示为 Maybe 值列表。我想执行各种聚合/统计操作,这些操作只是忽略缺失值。
这与以下问题有关:
Nothing
但是,如果缺少任何值,前一个问题就满足于返回,这在我的情况下不是一个选项。我有一个解决方案,其中涉及Num
为Maybe
. 但是,这意味着它特定于加法和乘法,并且它也有一些其他问题。
基于此,我们可以这样做:
我喜欢这个:它给了我两个函数,一个 lenientsum'
和一个 strict sum''
,我可以根据需要从中选择。我可以使用相同的函数来汇总任何Num
实例,因此我可以为列表重用相同的代码,而Maybe
无需先转换它们。
我不喜欢这个:实例重叠。此外,对于除加法和乘法之外的任何操作,我必须指定一个新类型类并创建新实例。
因此,我想知道是否有可能以某种方式获得一个很好的通用解决方案,也许按照第二个问题中建议的思路,将其Nothing
视为mempty
有问题的操作。
有没有一种很好的惯用方式来做到这一点?
编辑:这是迄今为止最好的解决方案:
haskell - Monoid 如何协助并行训练?
HLearn的自述文件指出 Monoid 类型类用于并行批量训练。我trainMonoid
在几个文件中看到过,但我很难剖析这个庞大的代码库。有人可以用初学者友好的术语解释它是如何工作的吗?我猜它与关联性属性有某种关系。
scala - 方法定义有什么问题
以下是我在 scala 中的方法签名和定义
但是,对于 reduce 的定义,我收到以下错误
不知道我哪里出错了。任何帮助,将不胜感激。
谢谢!