Prećutno programiranje

S Vikipedije, slobodne enciklopedije

Prećutno programiranje, takođe se naziva i tačka bez stila, je paradigma programiranja u kome definicije funkcije ne identifikuju argumente (ili "tačke") na kojima rade. Umesto definicije samo komponuje druge funkcije, među kojima su kombinacije koje manipulišu argumentima. Prećutno programiranje je od teorijskog interesa, jer je stroga primena rezultata sastava u programima koji su dobro prilagođeni za jednakosna rasuđivanja.[1] To je ujedno i prirodni stil pojedinih programskih jezika, uključujući APL i njegovo stablo,[2] kao i konkatenativni jezik kao što je Fort. Uprkos ovoj bazi, nedostatak argumenata imenovanja daje tačku bez stila reputacije kao nepotrebno nejasno, otuda epitet "besmislen stil."

UNIX skriptiranje koristi paradigmu sa cevima.

Na primer, niz operacija u aplikativnom jeziku kao sledeće:

def example(x):
  y = foo(x)
  z = bar(y)
  w = baz(z)
  return w

... piše u tački bez stila, kao sastavu niz funkcija, bez parametara:[3]

def example: baz bar foo

Ključna ideja u prećutnom programiranju je da pomogne u radu na odgovarajućem nivou apstrakcije. To jest, da prevede prirodne transformacije koje je dao  currying

u kompjuterskim funkcijama, gde levo predstavlja uncurried oblik funkcije i pravo na curried. CA označava funkcije od A do C, dok A × B označava Dekartov proizvod A i B.

Primeri[uredi | uredi izvor]

Funkcionalno programiranje[uredi | uredi izvor]

Jednostavan primer (u Haskell-u) je program koji uzima sumu liste. Programer može definisati sumu rekurzivno koristeći šiljati (vidi vrednost nivoa programiranja) metod kao:

sum (x:xs) = x + sum xs
sum [] = 0

Međutim konstatujući ovo kao iznos programer može da zameni sa:

sum xs = foldr (+) 0 xs

Onda nije potreban argument, tako da može biti zamenjen

sum = foldr (+) 0

koja je besplatna tačka Drugi primer koristi operator dot:

p x y z = f (g x y) z

U nastavku Haskell-kao pseudo kod izlaže kako smanjiti definiciju funkcije njegovog ekvivalent besplatne tačke:

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

pa

p = ((.) f) . g

Na kraju, vidi kompleksan primer imaginarne mape filter programa koji uzima listu, primenjuje funkciju za njega, a zatim filtrira elemente na osnovu kriterijuma

mf criteria operator list = filter criteria (map operator list)

Može izraziti besplatnu tačku[4] kao

mf = (. map) . (.) . filter

APL porodica[uredi | uredi izvor]

U J-u, ista vrsta tačke bez koda se javlja u funkciji napravljenog računa proseka liste (array) brojeva:

avg=: +/ % #

+/ sumira stavke iz niza autora mapiranja (/) zbir (+) na nizu. % deli sumu od broja elemenata (#) u nizu.

Stack-osnova[uredi | uredi izvor]

U stack-orijentisanom programskom jeziku (i oncatenative ones, od kojih je većina stack-osnova), tačke bez metode najčešće se koriste. Na primer, procedura za izračunavanje fibonačijevih brojeva može da izgleda ovako:

/fib
{
   dup dup 1 eq exch 0 eq or not
   {
      dup 1 sub fib
      exch 2 sub fib
      add
   } if
} def

UNIX skriptiranje[uredi | uredi izvor]

U UNIX skripti funkcije su računarski programi koji primaju podatke sa standardnog ulaza i šalju rezultate na standardni izlaz. Na primer

sort | uniq -c | sort -rn

je prećutno ili tačka bez sastava koji vraća tačke svojih argumenata i argumenata, u cilju smanjenja tačaka. 'Vrsta' i 'uniq' su funkcije, "-c' i '-rn' kontrolišu funkcije, ali argumenti se ne pominju. '|' je operator kompozicija.

Vidi još[uredi | uredi izvor]

  • Kombinacijska logika
  • Concatenative programski jezik
  • Programiranje na nivou funkcija
  • Joy (programski jezik), moderan visoko prećutni jezik
  • Besmislena topologija

Reference[uredi | uredi izvor]

  1. ^ Manuel Alcino Cunha (2005) Point-free Program Calculation Arhivirano na sajtu Wayback Machine (3. mart 2016)
  2. ^ W. Neville Holmes, ed. (2006) Computers and People
  3. ^ „Name code not values”. Concatenative.org. Pristupljeno 13. 9. 2013. 
  4. ^ pipermail

Spoljašnje veze[uredi | uredi izvor]