Tiché programování - Tacit programming
Tiché programování, také zvaný point-free styl, je paradigma programování ve kterých definice funkcí neidentifikují argumenty (nebo „body“), na nichž působí. Místo toho definice pouze komponovat další funkce, mezi nimiž jsou kombinátory které manipulují s argumenty. Tiché programování je teoreticky zajímavé, protože důsledné používání složení vede k programům, které jsou dobře přizpůsobeny rovný uvažování.[1] Je to také přirozený styl jistoty programovací jazyky, počítaje v to APL a jeho deriváty,[2] a zřetězené jazyky jako Forth. Nedostatek pojmenování argumentů dává bezbodovému stylu pověst zbytečně nejasného, proto přídomek „nesmyslný styl“.[1]
Unix skriptování používá paradigma s potrubí.
Klíčovou myšlenkou tichého programování je pomoc při provozu na příslušné úrovni abstrakce.
Příklady
Krajta
Tiché programování lze ilustrovat následujícím způsobem Krajta kód. Posloupnost operací, například následující:
def příklad(X): y = foo(X) z = bar(y) w = baz(z) vrátit se w
... je psán bezbodovým stylem jako kompozice posloupnosti funkcí bez parametrů:[3]
z functools import částečný, snížitdef komponovat(*fns): vrátit se částečný(snížit, lambda proti, fn: fn(proti), fns)příklad = komponovat(baz, bar, foo)
Pro složitější příklad Haskellův kód p = ((.) f). G
lze přeložit jako:
p = částečný(komponovat, částečný(komponovat, F), G)
Funkcionální programování
Jednoduchý příklad (v Haskell ) je program, který bere součet seznamu. Programátor může definovat součet rekurzivně pomocí a špičatý (srov. hodnota-úrovňové programování ) metoda jako:
součet (X:xs) = X + součet xssoučet [] = 0
Všimněte si však, že to jako složit programátor by to mohl nahradit:
součet xs = foldr (+) 0 xs
A pak argument není nutný, takže jej lze nahradit
součet = foldr (+) 0
což je bez bodu.
Další příklad použití složení funkce:
p X y z = F (G X y) z
Následující pseudokód podobný Haskellu odhaluje, jak snížit definici funkce na ekvivalent bez bodu:
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) (* Tady the infix komponovat operátor "." je použitý tak jako A kari funkce. *) = X -> ((.) F) (G X) = X -> (((.) F) . G) Xp = ((.) F) . G
Nakonec, chcete-li vidět složitý příklad, představte si program mapového filtru, který vezme seznam, použije na něj funkci a poté filtruje prvky na základě kritéria
mf kritéria operátor seznam = filtr kritéria (mapa operátor seznam)
Lze jej vyjádřit bez bodu[4] tak jako
mf = (. mapa) . (.) . filtr
Všimněte si, že jak již bylo uvedeno výše, body v „point-free“ odkazují na argumenty, nikoli na použití teček; běžná mylná představa.[5]
Bylo napsáno několik programů, které automaticky převádějí Haskellův výraz do bezbodové podoby.
Rodina APL
v J, stejný druh kódu bez bodu se vyskytuje ve funkci provedené k výpočtu průměru seznamu (pole) čísel:
prům=: +/ % #
+/
sečte položky pole mapováním (/
) součet (+
) do pole. %
vydělí částku počtem prvků (#
) v poli.
Eulerův vzorec mlčky vyjádřeno:
cos =: 2 Ó. ]hřích =: 1 Ó. ]Euler =: ^@j. = cos j. hřích
(j.
je primitivní funkce, jejíž monadická definice je 0j1
krát x a jehož dyadická definice je x + 0j1 × r
.) Stejné tiché výpočty vyjádřené v Dyalog APL:
prům ← +⌿ ÷ ≢cos ← 2 ○ ⊢hřích ← 1 ○ ⊢j ← {⍺←0 ⋄ ⍺+0j1×⍵} ⍝ tato část není ticháEuler ← *∘j = cos j hřích
Stohový
v zásobníkově orientované programovací jazyky (a zřetězené, z nichž většina je založená na zásobníku[Citace je zapotřebí ]) se běžně používají metody bez bodu. Například postup pro výpočet Fibonacciho čísla může vypadat jako následující v PostScript:
/ fib{ dup dup 1 ekv výměna 0 ekv nebo ne { dup 1 sub fib výměna 2 sub fib přidat } -li} def
Unix potrubí
Ve skriptu Unix jsou funkcemi počítačové programy, které přijímají data z standardní vstup a poslat výsledky na standardní výstup. Například,
třídit | uniq -c | třídit -rn
je tichá nebo bezbodová kompozice, která vrací počty jeho argumentů a argumentů v pořadí klesajících počtů. Funkce 'sort' a 'uniq' jsou funkce, funkce '-c' a '-rn' řídí funkce, ale argumenty nejsou zmíněny. Trubka '|' je operátor skladby.
Vzhledem k tomu, jak fungují potrubí, je možné předat pouze jeden „argument“ najednou ve formě dvojice standardních vstupních / výstupních proudů. Nicméně navíc deskriptory souborů lze otevřít z pojmenované trubky.
Viz také
- Kombinovaná logika
- Zřetězený programovací jazyk
- Programování na funkční úrovni
- Joy (programovací jazyk), moderní velmi tichý jazyk
- Zbytečná topologie
Reference
- ^ A b Manuel Alcino Pereira da Cunha (2005) Bodový výpočet programu
- ^ W. Neville Holmes, vyd. (2006) Počítače a lidé
- ^ "Název kódu nemá hodnoty". Concatenative.org. Citováno 13. září 2013.
- ^ pipermail
- ^ „Pointfree - HaskellWiki“. wiki.haskell.org. Citováno 2016-06-05.
externí odkazy
- Čisté funkce v APL a J. Jak používat tiché programování v jakémkoli jazyce podobném APL
- Uzavřené aplikační jazyky 1971 - 1976 a násl, v John W. Backus (Publikace)