Прећутно програмирање
Прећутно програмирање, такође се назива и тачка без стила, је парадигма програмирања у коме дефиниције функције не идентификују аргументе (или "тачке") на којима раде. Уместо дефиниције само компонује друге функције, међу којима су комбинације које манипулишу аргументима. Прећутно програмирање је од теоријског интереса, јер је строга примена резултата састава у програмима који су добро прилагођени за једнакосна расуђивања.[1] То је уједно и природни стил појединих програмских језика, укључујући APL и његово стабло,[2] као и конкатенативни језик као што је Форт. Упркос овој бази, недостатак аргумената именовања даје тачку без стила репутације као непотребно нејасно, отуда епитет "бесмислен стил."
UNIX скриптирање користи парадигму са цевима.
На пример, низ операција у апликативном језику као следеће:
def example(x):
y = foo(x)
z = bar(y)
w = baz(z)
return w
... пише у тачки без стила, као саставу низ функција, без параметара:[3]
def example: baz bar foo
Кључна идеја у прећутном програмирању је да помогне у раду на одговарајућем нивоу апстракције. То јест, да преведе природне трансформације које је дао currying
у компјутерским функцијама, где лево представља uncurried облик функције и право на curried. CA означава функције од A до C, док A × B означава Декартов производ А и B.
Примери
[уреди | уреди извор]Функционално програмирање
[уреди | уреди извор]Једноставан пример (у Haskell-у) је програм који узима суму листе. Програмер може дефинисати суму рекурзивно користећи шиљати (види вредност нивоа програмирања) метод као:
sum (x:xs) = x + sum xs
sum [] = 0
Међутим констатујући ово као износ програмер може да замени са:
sum xs = foldr (+) 0 xs
Онда није потребан аргумент, тако да може бити замењен
sum = foldr (+) 0
која је бесплатна тачка Други пример користи оператор dot:
p x y z = f (g x y) z
У наставку Haskell-као псеудо код излаже како смањити дефиницију функције његовог еквивалент бесплатне тачке:
p = \x -> \y -> \z -> f (g x y) z
= \x -> \y -> f (g x y)
= \x -> \y -> (f . (g x)) y
= \x -> f . (g x)
= \x -> ((.) f) (g x)
= ((.) f) . g
па
p = ((.) f) . g
На крају, види комплексан пример имагинарне мапе филтер програма који узима листу, примењује функцију за њега, а затим филтрира елементе на основу критеријума
mf criteria operator list = filter criteria (map operator list)
Може изразити бесплатну тачку[4] као
mf = (. map) . (.) . filter
APL породица
[уреди | уреди извор]У Ј-у, иста врста тачке без кода се јавља у функцији направљеног рачуна просека листе (array) бројева:
avg=: +/ % #
+/
сумира ставке из низа аутора мапирања (/
) збир (+
) на низу. %
дели суму од броја елемената (#
) у низу.
Stack-основа
[уреди | уреди извор]У stack-оријентисаном програмском језику (и oncatenative ones, од којих је већина stack-основа), тачке без методе најчешће се користе. На пример, процедура за израчунавање фибоначијевих бројева може да изгледа овако:
/fib { dup dup 1 eq exch 0 eq or not { dup 1 sub fib exch 2 sub fib add } if } def
UNIX скриптирање
[уреди | уреди извор]У UNIX скрипти функције су рачунарски програми који примају податке са стандардног улаза и шаљу резултате на стандардни излаз. На пример
sort | uniq -c | sort -rn
је прећутно или тачка без састава који враћа тачке својих аргумената и аргумената, у циљу смањења тачака. 'Врста' и 'uniq' су функције, "-c' и '-rn' контролишу функције, али аргументи се не помињу. '|' је оператор композиција.
Види још
[уреди | уреди извор]- Комбинацијска логика
- Concatenativе програмски језик
- Програмирање на нивоу функција
- Joy (програмски језик), модеран високо прећутни језик
- Бесмислена топологија
Референце
[уреди | уреди извор]- ^ Manuel Alcino Cunha (2005) Point-free Program Calculation Архивирано на сајту Wayback Machine (3. март 2016)
- ^ W. Neville Holmes, ed. (2006) Computers and People
- ^ „Name code not values”. Concatenative.org. Приступљено 13. 9. 2013.
- ^ pipermail
Спољашње везе
[уреди | уреди извор]- Pure Functions in APL and J Како користити прећутно програмирање у APL налик језику