Прећутно програмирање

Из Википедије, слободне енциклопедије
Иди на навигацију Иди на претрагу

Прећутно програмирање, такође се назива и тачка без стила, је парадигма програмирања у коме дефиниције функције не идентификују аргументе (или "тачке") на којима раде. Уместо дефиниције само компонује друге функције, међу којима су комбинације које манипулишу аргументима. Прећутно програмирање је од теоријског интереса, јер је строга примена резултата састава у програмима који су добро прилагођени за једнакосна расуђивања.[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' контролишу функције, али аргументи се не помињу. '|' је оператор композиција.

Види још[уреди]

Референце[уреди]

  1. ^ Manuel Alcino Cunha (2005) Point-free Program Calculation
  2. ^ W. Neville Holmes, ed. (2006) Computers and People
  3. ^ „Name code not values”. Concatenative.org. Приступљено 13. 9. 2013. 
  4. ^ pipermail

Спољашње везе[уреди]