zer*_*ing 4 haskell functional-programming monoids
我试图理解monoid中的关联.
从书中可以看出:
关联性简单地说您可以以不同方式关联操作的参数,结果将是相同的.
例如:
Prelude> (1 + 9001) + 9001
18003
Prelude> 1 + (9001 + 9001)
18003
Run Code Online (Sandbox Code Playgroud)
关于交换:
这并不像通勤或交换的操作那样强大.交换意味着您可以重新排序参数并仍然得到相同的结果.加法和乘法是可交换的,但列表类型的(++)只是关联的.
上面的例子是关联和可交换的,但有什么区别?我看不出差异.
Jon*_*eet 11
以字符串连接为例.假设您使用的是+用于字符串连接的语言.这自然是联想的,因为分组并不重要:
("a" + "b") + "c" == "abc"
"a" + ("b" + "c") == "abc"
Run Code Online (Sandbox Code Playgroud)
但操作数顺序绝对重要:
"a" + "b" = "ab"
"b" + "a" = "ba"
Run Code Online (Sandbox Code Playgroud)
关联但不可交换:
矩阵乘法是关联的,但不是可交换的.
(AB)C = A(BC)
Run Code Online (Sandbox Code Playgroud)
但:
AB != BA
Run Code Online (Sandbox Code Playgroud)
交换但不联想:
两个数字之间差异的绝对值是可交换的,但不是关联的.
|a - b| = |b - a|
Run Code Online (Sandbox Code Playgroud)
但:
||a - b| - c| != |a - |b - c||
Run Code Online (Sandbox Code Playgroud)