Програмски моноиди / Четврток / 14-ти Август / 19ч.

<BoR0> Monoid е алгебарска структура која содржи бинарна операција · и множество N за кои важи: 1. closure на множеството со операцијата, e.g. a · b = c така што ако a,b припаѓаат на N тогаш и c припаѓа. 2. асоцијативност на операцијата (a · b) · c = a · (b · c). 3. identity елемент e т
<BoR0> ака што a · e = e · a = a
<BoR0> пример: операција + врз природните броеви е моноид (0 е identity елементот). операција ++ врз листи е моноид ([] е identity елемент)
<BoR0> зашто е ова корисно? доаѓа некој рандом програмер што ти ја користи библиотеката и глеа дека имаш напраено моноид. без да гледа во кодот (и во документацијата) отприлика има sense што прави твојата библиотека
<BoR0> истото важи и за монади, функтори, етц
<BoR0> асоцијативност е корисно за паралелизам. identity елемент е корисен за рекурзија (think of base case)
<BoR0> (think of base case & pattern match*)
<BoR0> операција минус врз природни броеви не е моноид, бидејќи 1 - 2 = -1, а -1 не припаѓа во N. ама, операција минус врз integer-и е моноид, бидејќи 1 - 2 = -1, но -1 припаѓа во Z, како и 1 и -2
<BoR0> операција множење врз природни броеви е моноид, али identity елемент е 1 во овој случај. бидејќи a * 1 = 1 * a = a. а за плусот имавме a + 0 = 0 + a = a
<BoR0> после имаш други структури кои се разликуваат во својства. пример, имаш група која што е моноид ама плус бара и комутативни да бидат операциите
<BoR0> на крај се сведува учиш генерични структури коишто после ти помагаат да не трошиш многу време по документација и код. само типовите да ги видиш имаш смисла што прави кодот. и нормално, докажани се дека работат како што очекуваме :)

Вечер од 19:00 часот.

3 comments:

  1. BoR0, нели моноид бараше и асоцијативност?
    (а - нема...)
    a - (b - c) != (a - b) - c
    ах да. грешка за минус, не е моноид

    ReplyDelete
  2. примате благородници?

    ReplyDelete