Tacitní programování

Z testwiki
Skočit na navigaci Skočit na vyhledávání

Šablona:Programovací paradigmata

Tacitní programování je programovací paradigma, založené na principu, že se v definicích funkcí nepoužívají pojmenované parametry a místo toho se funkce definují jako kombinace dalších funkcí, pomocí tzv. kombinátorů (např. skládání funkcí je kombinátorem [1]). Tacitní programování je předmětem zájmu v teoretické informatice, protože vyjádření funkcí výhradně pomocí kompozice umožňuje uvažovat o programech jako o soustavách rovnic.[2] Tento styl je přirozený v určitých programovacích jazycích, tedy zejména jazyky inspirované APL (např. J, K, Q),[3] a Forthem (Joy, Factor).[4]

Jedním z použití tacitního programování jsou tzv. roury v Unixovém shellu, které umožňují spojovat programy právě tímto stylem.

Příklady

Funkcionální programování

Jednoduchý příklad v Haskellu je funkce, která vrátí všechna kladná čísla v seznamu. S vyjádřením argumentů by šlo funkci definovat takto:

positiveOnly xs = filter (> 0) xs

Tacitní zápis je stručnější:

positiveOnly = filter (> 0)

Jazyk J

V J se dá tacitně zapsat funkce pro výpočet průměru seznamu čísel:

prumer=: +/ % #

+/ sečte prvky seznamu, # dává počet prvků a % vydělí první číslo tím druhým.

Eulerův vzorec eix=cosx+isinx, v tacitním zápisu:

cos =: 2 o. ]
sin =: 1 o. ]
euler =: ^@j. = cos j. sin

Zásobníkové jazyky

Tento styl se také používá v zásobníkových (a tzv. "spojovacích", angl. concatenative)

[5] jazycích. Například algoritmus pro výpočet Fibonacciho posloupnosti lze v PostScriptu zapsat takto:

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

Unixové roury

V unixovém shellu se jako funkce dají skládat další počítačové programy, které čtou data ze standardního vstupu a zapisují je na standardní výstup.

sort | uniq -c | sort -rn

je roura, jejímž výsledkem jsou její argumenty uvedené spolu s jejich četností, seřazené sestupně podle četnosti. Programy 'sort' a 'uniq' hrají roli funkcí, '-c' a '-rn' modifikují chování funkcí, ale argumenty samotné jsou nevyjádřené. Svislá čára '|' je operátor kompozice.

Vzhledem k tomu, že roury používají standardní vstup a výstup, dá se pomocí nich předat pouze jeden argument. Pro více argumentů je potřeba použít pojmenované roury a to už není tacitní.

Související články

Reference

Externí odkazy

Šablona:Autoritní data