Monada ou monóide?

A definição técnica é um monóide é um semigrupo com uma identidade. O que não é muito ELI5.

Então: um monóide é “um monte de coisas, e uma coisa que fazemos com essas coisas, que se comporta de forma bastante intuitiva”. O que é vago como o inferno. Mas está destinado a ser. Muito freqüentemente, coisas que se comportam como essa “sensação” como adição.

Como, digamos, empurrar um monte de pilhas de paus juntos.

  1. Se eu tenho alguns paus, e os empurro juntos, o que está na pilha? Bastões, certo? Sim.

  2. E se eu os enfiar primeiro em pilhas mais pequenas e depois reagrupar essas pilhas à volta delas e depois empurrá-las juntas? Ainda é uma pilha de paus? E se eu enfiar primeiro os paus à esquerda antes de fazer o resto? Sim. É basicamente a mesma pilha de paus? Yup.

  3. Se eu tiver um monte de paus e enfiar nenhum paus nele… mudou alguma coisa? Não.

Os dois primeiros são o que faz dele um semigrupo.

#1 é o fecho sob uma operação binária. Claro, há muitos paus, mas eu poderia dividi-lo em dois grupos, ou adicionar um pau de cada vez, ou o que quer que seja. Quando eu opero os sticks usando Shove para juntá-los, eu ainda tenho coisas que são sticks no final. Eles não se transformaram em sapos, eu não os esculpi.

Fire seria não só não binário, mas também não fechado — se eu usar fogo nos paus, eu tenho paus no final? Bem, não, nem por isso. Os paus queimados, claro — o que notavelmente, são paus que tiveram a operação de incêndio neles.

#2 é associatividade. Isso significa que a ordem em que avaliamos as coisas não importa.

#3 é a identidade. Esta é a coisa que é análoga a zero — se você pegá-la, e aplicar sua operação nela e algo, nada muda. Então, Sem Sticks seria aqui.

De uma perspectiva de programação, a concatenação de strings é um bom exemplo de não-matéria.

Qual é a operação binária? Concatenação. Juntando as coisas. (Lembre-se do que eu disse sobre a sensação de adição!) Você opera apenas em duas peças de cada vez. Se você tivesse um milhão de palavras, você ainda o faria adicionando uma à outra, etc. a + b => ab

Está fechado sob essa operação? Fechamento significa “Eu tenho coisas deste tipo, faço alguma coisa e ainda tenho esse tipo no final”. Então, se pegarmos em cordas e as enfiarmos juntas, temos… uma corda longa! Então, sim, é um cordel. Fixe! Então está fechada sob a nossa operação.

É associativo? Sim! E lembrem-se, isto não significa que a ordem não importa, mas que a ordem de avaliação não importa. he + llo dá o mesmo resultado que h + ello ou h + el + lo ou h + (el + lo) ou (h + el) + lo ou ((h + (e + l) + l) + o são todos hello no final. (Note que ‘a ordem importa’ aqui seria — é he + llo o mesmo que lh + elo? Não, hello não é lhelo.

Existe uma identidade para esta operação? Yup — a cadeia vazia. apple + "" é apple. Ainda é uma cadeia de caracteres. "" é uma string, também, apenas uma sem nada nela. Então podemos usá-la para a nossa operação, ainda obter uma string — a mesma string com que começámos, de facto!

Deixe uma resposta

O seu endereço de email não será publicado.