Haskell a spol jsou více na to dobře si promyslet co chceš. Protože zapsat to pak je na pár řádek. A možná požadavek na větší teoretický rozhled. V Javě ani v C++ nepotřebuješ prakticky nic znát.
Mně přijde, že mnoho algoritmů (jejich zápis) se v obou přístupech prolíná. Promyslet se člověk akorát musí, jak obejít to, že do proměnných nejde přiřazovat, ale to už je o neznalosti specifických řešení (nebo “vzorů”).
Fígl je v tom, že bys do proměnných ani neměl chtít zapisovat, podobně jako nepřepisuješ funkci. V XSLT to je také tak a docela mi trvalo, než mi docvaklo, že by byla blbost do nich zapisovat. Není tam ani "else" a časem jsem zjistil, že nepotřebuji ani "if" či "choose". Podobně dopadl i "for-each" - cykly už také nepotřebuji. Ta změna myšlení není jednoduchá, ale stojí za to.
Nakonec přijdeš na to, že ve funkcionálních jazycích žádné algoritmy nepotřebuješ, vystačíš si se vzorci.