Tacitní programování
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
[editovat | editovat zdroj]Funkcionální programování
[editovat | editovat zdroj]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
[editovat | editovat zdroj]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 v tacitním zápisu:
cos =: 2 o. ]
sin =: 1 o. ]
euler =: ^@j. = cos j. sin
Zásobníkové jazyky
[editovat | editovat zdroj]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
[editovat | editovat zdroj]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
[editovat | editovat zdroj]Reference
[editovat | editovat zdroj]- ↑ BACKUS, John. Can programming be liberated from the von Neumann style? a functional style and its algebra of programs. Communications of the ACM. 1978-08-01, roč. 21, čís. 8, s. 613–641. Dostupné online [cit. 2023-08-29]. ISSN 0001-0782. doi:10.1145/359576.359579.
- ↑ Manuel Alcino Pereira da Cunha (2005) Point-free Program Calculation
- ↑ W. Neville Holmes, ed. (2006) Computers and People
- ↑ Concatenative language/Name code not values. concatenative.org [online]. [cit. 2023-08-29]. Dostupné online.
- ↑ PURDY, Jon. The Big Mud Puddle: Why Concatenative Programming Matters [online]. 2012-02-12 [cit. 2023-08-29]. Dostupné online.
Externí odkazy
[editovat | editovat zdroj]- Pure Functions in APL and J Jak používat tacitní programování v jazycích založených na APL (anglicky)
- Closed applicative languages 1971 - 1976 ff, John W. Backus