Monadă sau monoid?

Definiția tehnică este că un monoid este un semigrup cu o identitate. Ceea ce nu este foarte ELI5.

Deci: un monoid este „o grămadă de chestii, și un lucru pe care îl facem cu acele chestii, care se comportă destul de intuitiv”. Ceea ce este al naibii de vag. Dar este menit să fie. Foarte frecvent, lucrurile care se comportă astfel „se simt” ca o adunare.

Ca, să zicem, împingerea unor grămezi de bețe împreună.

  1. Dacă am niște bețe și le împing împreună, ce este în grămadă? Bețe, nu-i așa? Da, da.

  2. Ce se întâmplă dacă le împing mai întâi în grămezi mai mici și apoi regrupez într-un fel acele grămezi în jurul lor și apoi le împing împreună? Este tot o grămadă de bețe? Ce se întâmplă dacă împing mai întâi bețele din stânga înainte de a face restul? Da. Este practic aceeași grămadă de bețe? Da.

  3. Dacă am o grămadă de bețe și împing No Sticks în ea… s-a schimbat ceva? Nu.

Primele două sunt cele care îl fac un semigrup.

#1 este închiderea sub o operație binară. Sigur, sunt o mulțime de bețe, dar aș putea să-l împart în două grupuri, sau să adaug câte un băț pe rând, sau orice altceva. Când operez asupra bețelor folosind Shove pentru a le aduce împreună, am încă lucruri care sunt bețe la final. Nu s-au transformat în broaște, nu le-am cioplit.

Focul ar fi nu numai non-binar, dar nici închis – dacă folosesc focul pe bețe, mai am bețe la capăt? Păi, nu, nu prea. Bețe arse, sigur — care, în mod vizibil, sunt bețe asupra cărora s-a operat cu foc.

#2 este asociativitatea. Asta înseamnă că ordinea în care evaluăm lucrurile nu contează.

#3 este identitatea. Acesta este lucrul care este analog cu zero – dacă îl iei și îi aplici operația ta și ceva, nu se schimbă nimic. Deci, No Sticks ar fi aici.

Din perspectiva programării, concatenarea șirurilor de caractere este un bun exemplu non-matematic.

Ce este operația binară? Concatenarea. Unirea lucrurilor între ele. (Țineți minte ce am spus despre senzația de adunare!) Operați doar pe două bucăți la un moment dat. Dacă ai avea un milion de cuvinte, tot ai face-o adăugând unul la altul etc. a + b => ab

Este închisă sub această operație? Închidere înseamnă „Am chestii de acest tip, fac ceva cu ele și încă mai am acel tip la sfârșit”. Deci, dacă luăm șiruri de caractere și le lipim între ele, avem… un șir lung! Deci, da, este un șir. E un șir. Deci este închis sub operația noastră.

Este asociativ? Da! Și țineți minte, asta nu înseamnă că ordinea nu contează – ci că ordinea de evaluare nu contează. he + llo dă același rezultat ca și cum h + ello sau h + el + lo sau h + (el + lo) sau (h + el) + lo sau ((h + (e + l) + l) + o sunt toate hello la sfârșit. (Rețineți că „ordinea contează” aici ar fi — este he + llo același lucru cu lh + elo? Nu, hello nu este lhelo.

Există o identitate pentru această operație? Da — șirul gol. apple + "" este apple. Tot un șir de caractere. "" este tot un șir, doar că unul fără nimic în el. Deci îl putem folosi pentru operația noastră, obținând în continuare un șir – același șir cu care am început, de fapt!

.

Lasă un răspuns

Adresa ta de email nu va fi publicată.