ElB*_*ulP 5 functional-programming scala isomorphism monoids homomorphism
我正在阅读“Scala 编程”一书(红皮书)。
在关于 Monoids 的章节中,我理解了 Monoid 同态是什么,例如:M具有串联和length函数的 String Monoidf保留了Monoid结构,因此是同态的。
M.op(f(x), f(y)) == M.op(f(x) + f(y))
// "Lorem".length + "ipsum".length == ("Lorem" + "ipsum").length
Run Code Online (Sandbox Code Playgroud)
引用这本书(根据记忆,如果我错了,请纠正我:
当这在两个方向上发生时,它被命名为 Monoid isomorphisim,这意味着对于 monoids
M, N和函数f, g,f andThen g和g andThen f是identity函数。例如StringMonoid 和List[Char]Monoid with concatenation 是同构的。
但我不能看到看到这一个实际的例子,我只能想到f的length功能,但会发生什么g?
注意:我看过这个问题:What are isomorphism and homomorphisms。
要查看 和 之间的同构String,List[Char]我们有toList: String -> List[Char]和mkString: List[Char] -> String。
length 是从字符串幺半群到带加法的自然数幺半群的同态。
字符串幺半群的内同态的几个例子是toUpperCase和toLowerCase。
对于列表,我们有很多同态,其中许多只是fold.