Monad or monoid?

専門的な定義は、モノイドは恒等式を持つ半群であることです。

つまり、モノイドは「直感的に動作する、たくさんの材料と、その材料で行うこと」なのです。 これは非常に曖昧です。 でも、そういうことなんです。 非常に頻繁に、このような振る舞いをするものは、加算のように「感じ」ます。

たとえば、棒の束を押し付けるような感じです。

  1. いくつかの棒があり、それらを一緒に押し込むと、その山には何があるでしょうか。 棒でしょ? そうだ。

  2. 最初に小さな山に押し込んで、次にその山を自分の周りに再グループ化して、一緒に押し込んだらどうでしょう? それはまだスティックの山のようなものですか? 左側の棒を先に押し込んでから、残りの棒を押し込んだらどうでしょう? そうです。 それは基本的に同じ棒の山ですか? Yup.

  3. もし私がスティックの束を持っていて、No Sticksを突っ込んだら・・・何か変わりましたか? いや…

最初の2つは半群になるものです。

#1 は二項演算のもとでの閉包です。 確かに棒はたくさんあるけど、2群に分けたり、棒を1本ずつ追加したり、いろいろできるんだ。 Shoveで操作して棒をまとめると、最後にはまだ棒のままのモノがある。 カエルになったわけでもなく、彫ったわけでもないんですけどね。

火は二項対立でないだけでなく、閉鎖的でもない — もし私が棒に火を使ったら、最後に棒ができますか? いや、そうでもないです。 焼け焦げた棒は確かにあります — これは顕著なことに、火による操作を受けた棒です。 つまり、評価する順番は関係ないってことです。

#3 は恒等式。 これは0に相当するもので、これを受け取って演算を適用しても何も変わりません。 プログラミングの観点からは、文字列の連結は数学ではない良い例です。

2項演算は何でしょうか。 連結です。 物事を結合することです。 (足し算のように感じると言ったことを思い出してください!) 一度に 2 つの部分に対してのみ操作するのです。 もし100万語あったとしても、1つを別のものに足すなどして行います。 a + b => ab

その操作では閉じているのでしょうか? クロージャとは、”この種のものを持っていて、それに何か操作をして、それでも最後にその種のものがある “という意味です。 だから、文字列をくっつけていくと…長い文字列になるんです!(笑 そう、これは文字列なんです。 かっこいい!

それは連想型ですか? そうです。 これは順序が重要でないという意味ではなく、評価の順序が重要でないという意味です。 he + lloh + elloh + el + loh + (el + lo)(h + el) + lo((h + (e + l) + l) + o が最後に hello であるのと同じ結果になるのです。 (なお、ここでいう「順序が重要」とは、 — he + llolh + elo と同じか? いいえ、hellolheloではありません。

この操作のためのIDはありますか? はい — 空の文字列です。 apple + ""apple です。 まだ文字列です。 "" も文字列ですが、何も入っていない文字列です。 ですから、これを演算に使っても文字列が得られます — 実際には、最初に使ったのと同じ文字列です!

コメントを残す

メールアドレスが公開されることはありません。