Názory ke článku Co je to funkcionální programování
Diky za zajimavy clanek...o funkcionalnim programovani uz jsem slychal, ale doposud jsem nemel moznost si o nem nic precist...teda, spis se mi nechtelo, ale ted, kdyz mi clanek pristal rovnou pod nos... ;o)
Mel bych malou poznamku k prikladu vypoctu souctu druhych mocnin od 1 do n...ta funkce se mi moc nelibi...pokud jsem neco nepochopil spatne, jsou v ni chyby...nemela by vypadat spis nejak takhle?
int sumsq (int n) # tady byl strednik
{
int s, k;
s = 0;
for (k = 1; k<=n; k++) # tady byl prehozen druhy a treti parametr cyklu
s = s + k*k;
return s; # tady by nemelo byt return sumsq
}
A pak takovy nepodstatny detail - v odstavci o Lispu zustal kod specialniho znaku "&dnash;".
Jeste jednou diky za clanek, tesim se na pokracovani...
Dekuji za pripominky. Ta ukazka funkce byla narychlo prepsana z Pascalu do C, takze se tam objevily chyby. Uz jsem je opravil.
--
Libor
Jen bych chtel podotknout, ze pokud by to nekdo chtel brat opravdu vazne s Haskellem, tak by se asi mel podivat na elektronicky text nazyvany "Gentle introduction to Haskell", ktery se vyskytuje na strankach http://www.haskell.org/tutorial/. Zajimava je asi hlavne cast nazvana prelude - tam je mozne se docist, jak jsou udelane preddefinovane fce, takze se na tom clovek celkem hodne nauci.
3. 7. 2007
I přesto, že si velice vážím Vašeho článku (tedy právě prostřednictvím něho mohu rychle pochopit Haskell => naučit se základy jednoho z deklarativních jazyků), dovoluji si "rýpnout" do příkladu, kde srovnáváte deklarativní a imperativní zápis jednoho problému.
Navrhl bych porovnávat Haskell (plný rekurzí) s příklady C také za použití rekurze.
Chápu, že níže uvedenou funkci nelze přímo srovnávat podle hlavičky (-: -> dva parametry, jejíž převedení na jeden parametr by vyžadovalo další funkci (v C++ přetížení), která až následně vrátí výsledek funkce sumsq (n, 0)
Výsledkem se stává (dle mého téměř bezcenného názoru) podobnější - porovnatelnější zápis.
int sumsq (int n, int s)
{
return n == 1 ? s+n : sumsq(n-1, s + n*n);
}
Měl bych na Vás otázku, jestli se tímto způsobem při minimalizaci zápisu kódu jazyka C dostaneme do situace, kdy nám bude "přebývat" právě jedna nebo žádná proměnná na jednu rekurzivní funkci navíc oproti zápisu jazyku Haskell. (ve výše uvedeném kódu můžeme vidět, že pomocnou proměnnou (parametr) int s, potřebujeme právě kvůli tomu, že C nedokáže vracet funkci - tedy jako Haskell)
Ještě bych dodal, že rozumím významu deklarativní programování, tedy postupu, kde píšeme popis řešení namísto imperativního programování, kde píšeme postup řešení. Tím jsem také došel k závěru (neříkám, že je správný), že nelze přímo srovnávat tyto typy programování.
Děkuji za Váš čas strávený, jak psaním tohoto kvalitního článku, tak za případné přečtení tohoto příspěvku. :-)
Reagoval na komentář od uživatele LameonMuni :
Stačí použít implicitní parametr a rekurze bude úplně stejně fungovat i v C++
int sumsq (int n, int s=0)
{
return n == 1 ? s+n : sumsq(n-1, s + n*n);
}