3

我正在尝试学习 的概念monad,我正在观看这个出色的视频Brian Beckend 试图解释什么是 monad。

当他谈到 时monoid,它是一个类型的集合,它有一个组合规则,这个组合必须遵守 2 个规则:

  1. 联想: x @ (y @ z ) = (x @ y) @ z
  2. 集合中的特殊成员:x @ id = x and id @ x = x

我正在使用@代表作文的符号。id指特殊成员。

第二点是我想要理解的。为什么这很重要?如果没有这样的特殊成员怎么办?

当我学习新概念时,我总是试图将这些抽象的概念与其他一些具体的事物联系起来,这样我才能充分理解和背诵它们。

所以我想要联系monad和关注monoid的是lego。因此,乐高套装中的所有积木构成了一个集合。组合规则是将它们组合成新形状的积木。很明显,组合遵循第一条规则:联想。但是没有特殊的积木可以与其他积木组合并得到相同的回报。所以它不遵守第二条规则。

但是乐高仍然是高度可组合的。当乐高不遵守第二条规则时,遗漏了什么?后果是什么?
或者这样说,与其他monoid遵守所有这些规则的人相比。其他有什么功能monoid而乐高没有?

4

2 回答 2

4

monoid没有标识元素的A称为 a semigroup,它仍然是一个很好且有用的构造。它只是给了我们一些不同的东西。例如,考虑fold列表中的 a。我们可以通过将列表的每个元素映射到一个幺半群然后组合它们来做到这一点。但是如果你只有一个半群,你就不能fold在一个可能是空的列表上。

考虑另一个例子——大于零的整数与大于或等于零的整数。在后一种情况下,我们有一个幺半群,因为零实际上是我们的零元素。例如,我可以求解方程“5 + x = 5”。在前一种情况下,使用半群,我无法求解该方程。或者我可以说“你没有苹果,那我给你五个苹果,你有几个?” 在一个没有零的世界里,我们必须假设每个人都从一些苹果开始!因此,出于同样的原因,零对数字很重要,在更抽象的代数结构中使用“广义零”是很方便的。

(请注意,这并不意味着一个或另一个“更好”——只是它们不同,并且额外的结构(如果可用)可以派上用场。另请注意,有一种通用的方法可以将半群变成monoid 通过添加一个零元素,因此由于所有半群结果都提升为 monoid 上的“完成”结果,因此通常更方便地仅根据后者来处理事物。)

于 2016-03-19T23:11:01.193 回答
0

空的乐高可以被认为是,id但你将不得不接受空的空间是乐高。但是是的,如果你不想像@sclv 写的那样 id ,那将是一个semigroup.

于 2016-06-26T11:47:15.710 回答