Monads Everywhr | R-BLOGGERS

URMĂREȘTE-NE
16,065FaniÎmi place
1,142CititoriConectați-vă

(Acest articol a fost publicat pentru prima dată pe R pe biofunctorși a contribuit cu drag la R-Bloggers). (Puteți raporta problema despre conținutul de pe această pagină aici)


Doriți să vă împărtășiți conținutul pe R-Bloggers? Faceți clic aici dacă aveți un blog sau aici dacă nu.

Un monad este un model foarte util. Dacă nu știți despre ce este vorba, atunci citiți postarea mea de acum câțiva ani, urmăriți acest videoclip excelent și puteți citi și postarea Insightful a lui J. Carroll. După ce credeți că primiți conceptul, această postare pe blog va fi mult mai plăcută. Asta pentru că aș dori să mă concentrez pe motivul pentru care monadele nu par să vrea să se răspândească în limba R.

La urma urmei, R este un limbaj de programare funcțional și ar fi firesc ca Monads să facă parte din setul de instrumente de bază, ca în Haskell sau Rust, totuși nu este cazul. Au existat și sunt încercări: de exemplu {cronicar} sau
{pot fi} Pachet și poate mai mult. Dar nu am văzut niciodată pe nimeni să le folosească în producție, cel puțin nu în domeniul meu, bioinformatice. În această postare, aș dori să mă gândesc de ce este cazul.

De ce are nevoie un monad?

  • Un tip de date care stochează tipuri „simple” (duh…)
  • O funcție care înfășoară datele în monadă (uneori numită return sau
    pure)
  • Un operator de compoziție (bind, >>=) care ne permite să lansăm pași mai mici într -un proces chiar și pe tărâmul monad
  • Opțional, o funcție de desfacere care extrage valori din container
  • De asemenea, este util să aveți funcții care utilizează tipul de date MONAD. 🙂

Așadar, există tărâmul de bază R, unde există funcții simple și lansăm calcule (adică funcții compunem) cu operatorul de conductă (|>, %>%), sau cu paranteze. Și există diferitele tărâmuri monad: poate, listă, logger/scriitor, fie, Promise, unde folosim operatorul de legătură în același scop. Odată ce intrăm într -un astfel de tărâm Monad, operatorul de conducte și compoziția obișnuită nu vor funcționa până nu ne vom întoarce în lumea bazei. Acest lucru se datorează faptului că funcțiile monadice folosesc tipuri simple ca intrare și produc tipuri de monad, astfel încât nu o poți pur și simplu să o țepi în următoarea funcție.

În majoritatea altor limbaje de programare există tipuri de date încorporate, de bază: Int, Char, etc., iar diferitele monade sunt derivate din acestea. R nu este un limbaj convențional în acest sens, deoarece nu are tipuri scalare, ci doar vectori! Expresia a <- 3 atribuie de fapt un vector de lungime 1 la variabilă a, Nu este o dublă tip. Aceasta înseamnă că în R, tărâmul de bază este deja un monad. Aici, se numește a vectorechivalentul listă în alte limbi.

Nu numai că, de fapt, avem de -a face cu o combinație Monad, deoarece fiecare tip de vector poate avea valori lipsă! Cred că toată lumea este familiarizată
NA_string_ NA_integer_ et al. Deci, „Bună lume!” ar fi un tip de șir în alte limbi, dar în r este practic ( Maybe String ) În mod implicit – un vector de șiruri opționale. Pentru tipurile de date numerice, NaN se adaugă la aceasta, care poate fi pur și simplu interpretat ca NAdar diferă de acesta, tipul său ar putea fi scris ca ( NaN | NA | Numeric ).

Având în vedere acest lucru, poate că nu există prea multe puncte în implementare Listă şi
Pot fi Monads, deoarece acestea sunt prezente în mod implicit, doar într -un mod ușor neobișnuit nu ca monade, ci sub forma unor tipuri de date de bază.

Acum că sunt iluminat, mă întreb dacă cineva ar putea folosi faptul că suntem deja pe un tărâm Monad. Poate că ne -am putea simplifica codul, poate că nu. Acesta ar trebui să fie un subiect al unei alte postări pe blog.

Dominic Botezariu
Dominic Botezariuhttps://www.noobz.ro/
Creator de site și redactor-șef.

Cele mai noi știri

Pe același subiect

LĂSAȚI UN MESAJ

Vă rugăm să introduceți comentariul dvs.!
Introduceți aici numele dvs.