【发布时间】:2019-09-11 11:19:17
【问题描述】:
我正在阅读“Scala 编程”一书(红皮书)。
在关于 Monoid 的章节中,我了解了 Monoid 同态是什么,例如:String Monoid M with concatenation and length function f 保留了幺半群结构,因此是同态的。
M.op(f(x), f(y)) == M.op(f(x) + f(y))
// "Lorem".length + "ipsum".length == ("Lorem" + "ipsum").length
引用这本书(凭记忆,如果我错了,请纠正我:
当这发生在两个方向上时,它被命名为 Monoid isomorphisim,这意味着对于 monoids
M, N,函数f, g、f andThen g和g andThen f是identity函数。例如StringMonoid 和List[Char]Monoid 连接是同构的。
但是我看不到实际的例子,我只能将f 视为length 函数,但是g 会发生什么?
注意:我看过这个问题:What are isomorphism and homomorphisms。
【问题讨论】:
-
啊哈!,不是选择的答案,但这个stackoverflow.com/a/55993551/1612432,在 Monoid 同构 中是我的答案。所以,在这种情况下,
f和g将是toVector和toList,对吧? -
哦,那是我的,谢谢! :) 是的,没错。
-
@slouc 我在那儿给你投了赞成票 ;-)
-
谢谢 :) 很高兴看到您的回答对人们有所帮助。干杯!
标签: scala functional-programming monoids isomorphism homomorphism