Blog | Malý úvod do Point-free funkcí

Malý úvod do Point-free funkcí

Jedna z vychytávek, kterou používají vývojáři v Haskellu, je tzv. point-free programming. Jedná se o formu zápisu funkcí, při kterých vůbec není potřeba zapisovat parametry funkce.

Mějme v LiveScriptu funkci pro sečtení čtverců od 1 do N.

to = (n) -> [1 to n]
sum-of-squares = (n) -> sum map (^ 2), to n

Tato funkce není point-free - vypisujeme seznam parametrů.

Nyní bych vám rád představil operátor . (ano, tečka), který slouží pro kompozici funkcí. Když napíšu abc = a . b, je to jako napsat abc = -> a(b.apply(arguments)).

Funkci můžu převést na tento tvar:

sum-of-squares = sum . (map (^ 2)) . to

Všimněte si, že už nepotřeuji šipku ->. Jak se vyhodnocuje potom tento kód?

sum-of-squares 5

V 1. kroku je zavolána funkce to(5), která vrátí [1, 2, 3, 4, 5]. V dalším je zavolána funkce map (^2), [1, 2, 3, 4, 5], která vrátí pole druhých mocnin funkce. A v posledním funkcí sum jsou hodnoty sečteny.

Celé to bylo velmi snadné, díky tomu, že v LiveScriptu máme automatický partial application a operátor tečka.

Jazyky, které nemají partial application a kompozici, vyžadují, abych totéž zapsal ručně.

function sumOfSquares(n) {
        return sum(map(function(n) {return Math.pow(n, 2);}, range(n));
}

Point-free funkce umožňují zaměřit se víc na to "co chci" a méně na "jak to chci udělat". Větší použití takového stylu programování najdete v tzv. Function-level programming jazycích (neplést s funkcionálními jazyky), jako je APL, J.

Zájemce o Function-level programming bych rád odkázal na skvělý paper Johna Backuse "Can Programming Be Liberated from the von Neumann Style? A Functional Style and Its Algebra of Programs".

Vlastně bych ten paper doporučil všem, je neuvěřitelné, jak v roce 1978 dokázal Backus popsat problémy programovacích jazyků, kterými i moderní jazyky trpí dodnes.

Programování

Předejte zkušenosti i dalším a sdílejte tento článek!



Jiří Knesl
Business & IT konzultant

Jiří Knesl poprvé začal programovat v roce 1993. Od té doby, díky skvělým učitelům a později zákazníkům, měl možnost neustále růst v oboru vývoje webových aplikací a informačních systémů. v roce 2002 se přidal zájem o ekonomii a v roce 2006 o organizaci práce. Vším tím se konstantně profesně zabývá jak ve svém podnikání, tak i u zákazníků. Za posledních 5 let vydal na tato témata přes 400 článků.

Prohlédněte si moje reference

Mám zkušenosti z rozsáhlých projektů pro korporace, velké podniky, střední i malé firmy, ale i pro startupy v cloudu. Zvyšoval jsem jejich know-how, pomáhal nastavovat jejich organizační strukturu, byl lektorem a mentorem v náročných situacích. Podívejte se, jak vidí můj přínos samotní klienti.

Sledujte mé postřehy na sociálních sítích