Aplicare parțială

De la Wikipedia, enciclopedia liberă.
Salt la navigare Salt la căutare
Notă despre dezambiguizare.svg Dezambiguizare - Dacă căutați semnificația termenului ca un contrast al funcției totale , consultați funcția parțială .

În matematică și informatică , aplicarea parțială a unei funcții este definită ca aplicarea unei funcții la o parte a argumentelor sale.

Strict vorbind, această operațiune ar trebui „interzisă”, deoarece o funcție trebuie aplicată tuturor argumentelor sale care urmează a fi definite. De fapt, există mai multe limbaje de programare care vă permit să faceți acest lucru prin returnarea unui rezultat utilizabil și chiar și în matematică este posibil să înțelegeți o expresie în care o funcție este aplicată unei părți din argumentele sale.

Abordare intuitivă cu exemple

Chiar înainte de a furniza definiția formală, un exemplu simplu poate arăta că sensul care trebuie dat unei aplicații parțiale este destul de intuitiv, dincolo de complicațiile care apar atunci când se dorește formalizarea unei astfel de intuiții.

Să presupunem că avem o multiplica funcție care multiplică două numere întregi , adică, că fiecare pereche de numere întregi face corespund lor produs:

Prin definiție, dacă această funcție este aplicată la două numere, returnează un număr. De exemplu . Dar să presupunem că aveți o expresie ca aceasta: (unde punctul indică absența unui argument), sau o expresie ca aceasta: , adică o expresie în care este prezent doar unul dintre cele două argumente. Ce sens ar putea fi dat acestei expresii?

Dacă utilizați o astfel de expresie în anumite limbaje de programare care vă permit să faceți acest lucru, programul returnează o funcție. Se înțelege intuitiv că funcția returnată este o funcție care „așteaptă” al doilea argument, pentru a finaliza operația. Astfel funcția care a fost scrisă ca sau cum ia un argument și returnează produsul acelui argument cu numărul 2:

Intuitiv, lucrul este atât de banal încât pare aproape o complicație formală inutilă, în sensul că pare să nu existe necesitatea introducerii unor definiții suplimentare pentru a putea întreba:

Cu toate acestea, în realitate, există o diferență conceptuală notabilă, deoarece o funcție a două argumente apare pe primul membru al ecuației, adică se înmulțește , aplicată la două argumente, în timp ce o funcție a unui argument apare pe al doilea membru al ecuației, acesta este , aplicat la un argument. Revenind la exemplul de mai sus, este o funcție, pe care am putea să o definim ca dublă :

care ia un număr ca argument și returnează dublul acestui număr.

Mai mult, întrucât pentru m fixat multiplicați ( m ) este o funcție, atunci în al doilea membru al ecuației multiplicarea trebuie considerată o funcție a unui argument, care pentru fiecare număr întreg m returnează o funcție din la . O astfel de funcție, care ia un „număr” (în sens generic) și returnează o funcție, se numește și funcțională . Prin urmare, atunci când o funcție este aplicată doar unei părți din argumentele sale, această funcție este implicit redefinită ca funcțională "asociată în mod natural" cu funcția în sine. Într-adevăr, mai exact ca una dintre funcționalitățile asociabile, deoarece pentru fiecare alegere de argumente pe care să se aplice parțial funcția există o funcționalitate asociată diferită.

Fără a împovăra notația prin definirea unei funcționale diferite pentru fiecare posibilă combinație parțială de argumente, putem lăsa contextul să o determine, folosind suficientă notație pentru a o clarifica. Deci, dacă scrieți multiplicare (2), este clar din context că utilizați multiplicare ca funcționalitate care asociază o funcție fiecărui număr, atunci multiplicare (2) este în special funcția dublă , în timp ce multiplicări (3) ar fi funcție triplă etc.

După cum s-a menționat mai sus, unele limbaje de programare implementează această „sensibilitate la context”, așa că atunci când o funcție este aplicată doar unei părți din argumentele sale, limbajul tratează funcția ca funcțională și returnează o funcție, care poate fi apoi aplicată celorlalte. argumente, care la rândul lor pot fi luate toate împreună sau parțial. În schimb, alte limbi necesită ca funcția să fie transformată mai întâi într-o funcțională, iar apoi această funcționalitate să fie aplicată unei părți a argumentelor. Și întrucât, în principiu, există atât de multe funcționale, câte combinații posibile de argumente, pentru a nu încărca notația, se face de obicei o alegere „radicală”, prin definirea unui operator care transformă o funcție într-o funcționalitate care ia argumentele „ pe rând. timp "începând cu primul.

Acest operator se numește curry , iar operațiunea corespunzătoare se numește currying , în onoarea lui Haskell Curry , care a studiat implementarea acestuia pentru o lungă perioadă de timp. În aceste limbaje de programare, aplicarea parțială a unei funcții la argumentele sale devine din nou „interzisă”; de exemplu, dacă aveți o funcție f cu trei argumente, atunci când nu doriți să o aplicați imediat tuturor celor trei argumente, scriind f ( x , y , z ), trebuie mai întâi să reduceți funcția f la curry funcțional ( f ), apoi aplicați această funcționalitate primului argument, obținând curry funcțional ( f ) ( x ), care aplicat celui de-al doilea argument dă funcția curry ( f ) ( x ) ( y ), care se aplică celui de-al treilea argument returnează numărul curry ( f ) ( x ) ( y ) ( z ). Acest operator este întotdeauna implicit în calculul lambda , unde fiecare funcție a mai multor argumente este considerată funcțională și argumentele sunt luate „unul câte unul”, începând de la primul, dând ca rezultat alte funcționale sau (ajuns la penultimul argument) o funcție .

Definiție formală

Date trei seturi A , B și C (posibil coincidente) și o funcție

două funcționale pot fi asociate cu acesta într-un mod „natural” Și definit astfel:

Dacă numărul variabilelor crește, notația devine și mai grea și este necesar să se ia în considerare „funcționale cu valori funcționale”, adică funcționale care, atunci când sunt aplicate argumentului lor, la rândul lor returnează o funcționalitate.

Elemente conexe

Implementări specifice pentru fiecare limbă

Matematica Portalul de matematică : accesați intrările Wikipedia care se ocupă de matematică