Apply

Në matematikë dhe shkenca kompjuterike, **apply** është një funksion që zbaton një funksion mbi argumente. Është thelbësor për gjuhët e programimit që rrjedhin nga llogaritja lambda, të tilla si LISP dhe Scheme, dhe gjithashtu për gjuhët funksionale . Ai ka një rol në studimin e semantikës denotative të programeve kompjuterike, sepse është një funksion i vazhdueshëm në rend të plotë të pjesshëm . **Apply** është gjithashtu një funksion i vazhdueshëm në teorinë e homotopisë, dhe, në të vërtetë, mbështet të gjithë teorinë: ai lejon që një shformim të homotopisë të shihet si një shteg i vazhdueshëm në hapësirën e funksioneve. Po kështu, mutacionet (rifaktorimet) e vlefshme të programeve kompjuterike mund të shihen si ato që janë "të vazhdueshme" në topologjinë Scott .

Përcaktimi më i përgjithshëm për **apply** është në teorinë e kategorisë, ku është e drejtë ngjitur me currying në kategoritë monoidale të mbyllura . Një rast i veçantë i kësaj janë kategoritë e mbyllura karteziane, gjuha e brendshme e të cilave është thjesht llogaritja lambda e tipuar .

## Programimi 
### Funksioni apply 
Apply është gjithashtu emri i një funksioni të veçantë në shumë gjuhë, i cili merr një funksion dhe një listë, dhe përdor listën si listën e argumenteve të vetë funksionit, sikur funksioni të thirrej me elementët e listës si argumente. Kjo është e rëndësishme në gjuhët me funksione variadike, sepse kjo është mënyra e vetme për të thirrur një funksion me një numër të papërcaktuar (në kohën e përpilimit) argumentesh.

#### Lisp dhe Skema e Përbashkët 
Në Common Lisp **apply** është një funksion që zbaton një funksion në një listë argumentesh (vini re këtu se "+" është një funksion variatik që merr çdo numër argumentesh):
```lisp
(apply #'+ (list 1 2))
```
Në mënyrë të ngjashme në Scheme:
```scheme
(apply + (list 1 2))
```

#### Shkoni 
Në Go, argumentet variadike të tiposura thjesht mblidhen në një pjesë. Thtirrësi mund të kalojë në mënyrë eksplicite një slice në vend të argumenteve variadike, duke shtuar një `...` për të bërë slice argumentin. Kjo mund të bëhet vetëm për një parametër variatik. Thirrësi nuk mund të aplikojë një grup argumentesh për parametrat jo-variadikë, pa përdorur reflektim.{{sxhl|1=s := []string{"foo", "bar"}
variadicFunc(s...)|2=go}}

#### Haskell 
Në Haskell, funksionet mund të zbatohen me anë të një ballafaqimi të thjeshtë:
```haskell
func param1 param2 ...
```

#### JavaScript 
Në JavaScript, objektet e funksionit kanë një metodë `apply`, argumenti i parë është vlera e fjalës kyçe të `this` funksioni brenda funksionit; e dyta është lista e argumenteve:
```javascript
func.apply(null, args);
```

#### PHP 
Në PHP, `apply` quhet `call_user_func_array` :
```php
call_user_func_array('func_name', $args);
```

#### Python dhe Ruby 
Në Python dhe Ruby, i njëjti shënim me yll që përdoret në përcaktimin e funksioneve variadike përdoret për thirrjen e një funksioni në një varg dhe grup përkatësisht:
```python
func(*args)
```
Python fillimisht kishte një funksion apply, por ky u zhvlerësua në favor të yllit në 2.3 dhe u hoq në 3.0. 

## Vetia universale 
Konsideroni një funksion g:(X\times Y)\to Z, domethënë, g\isin [(X\times Y)\to Z] ku shënimi i kllapave [A\to B] shënon hapësirën e funksioneve nga *A* në *B.* Me anë të currying, ekziston një funksion unik \mbox{curry}(g) :X\to [Y\to Z] . Pastaj **Apply** ofron morfizmin universal

: \mbox{Apply}:([Y\to Z]\times Y) \to Z ,

të tillë që

: \mbox {Apply}(f,y)=f(y)

ose, në mënyrë të njëvlershme merret diagrami i lëvizjes

: \mbox{Apply} \circ \left( \mbox{curry}(g) \times \mbox{id}_Y \right) = g

Më saktësisht, curry dhe app janë funktorë të përngjitur .
alt=Universal property of the exponential object|qendër| Vetia universale e objektit eksponencial