Funkcionální programování: Porovnání verzí

Smazaný obsah Přidaný obsah
m →‎Striktní, nestriktní a líné vyhodnocení: Odstraněny přebytečné značky <code> uvnitř kódu
m →‎Striktní, nestriktní a líné vyhodnocení: Opraveny uvozovky, doplněna značka <code>
Řádek 92:
V prvním případě se jedná o striktní výpočet, argumenty funkce jsou vyhodnoceny před voláním funkce; vedle toho druhý případ je příklad nestriktního vyhodnocení, kde jsou argumenty přenechány ve funkci nevyhodnocené a volání funkce určuje, kdy budou argumenty vyhodnoceny.
 
Striktní vyhodnocení je efektivnější. Ve striktním výpočtu je argument počítán jednou, zatímco v "blbě„blbě implementovaném"implementovaném“ nestriktním může být počítán vícekrát, jak můžete vidět v příkladu nahoře, kde je funkce <code>g</code> vypočítána vícekrát. Striktní výpočet je také jednodušší implementovat, pokud argumenty předané datové funkci jsou datové hodnoty, v nestriktním výpočtu mohou být argumenty výrazy. A ve výsledku první funkcionální jazyky jako [[LISP]], [[ISWIM]] a [[ML (programovací jazyk)|ML]] spolu s hodně novými funkcionálními jazyky používají striktní výpočet.
 
Nicméně jsou tu důvody preferovat nestriktní výpočet. Lambda kalkul poskytuje silnější teoretické základy pro jazyky, které používají nestriktní výpočet. Nestriktní výpočet používají nejvíce definiční jazyky. Například podporuje nekonečné datové struktury jako seznam všech kladných proměnných typu integer nebo všech prvočísel. S nestriktním výpočtem jsou tyto struktury vypočítány pouze v kontextu, kde je vyžadována konečná délka. To vedlo k vývoji líného výpočtu, což je typ nestriktního výpočtu, kde výsledek počátečního výpočtu kteréhokoliv argumentu může být sdílen přes výpočtovou sekvenci. Ve výsledku není argument spočítán nikdy více než jednou. Líný výpočet je používán hlavně línými moderními [[čistě funkcionální]]mi jazyky jako je [[Miranda (programovací jazyk)|Miranda]], [[Clean]] a [[Haskell (programovací jazyk)|Haskell]].