Názory k článku
Funkce v programovacím jazyku Lua
pascal
celé vláknoRe: pascal
celé vláknoRe: pascal
celé vláknoPodľa mňa ani v C netreba pri (jednoduchej) rekurzii žiadne zvláštne deklarácie.
Re: pascal
celé vláknoRe: pascal
celé vláknoRe: pascal
celé vláknofloat fce2();
float fce1(int a, int b, double c) { return fce2(1,2,3.0); }
float fce2(int a, int b, double c) { return fce1(1,2,3.0); }
Re: pascal
celé vláknoJsem ovšem zvědav, jak kompilátor podle Vás bez prototypu (například v headeru) pozná, že funkce z jiné kompilační jednotky, kterou právě kompilovaná jednotka používá, vrací float a nikoli int.
Re: pascal
celé vláknoPokud mluvite o kompletnim vynechani prototypu funkce, tak to fungovalo pouze K&R Cecku, od ANSI C to je zakazana vlastnost.
To co funkce vraci samozrejme kompilator nepozna (stejny duvod proc nejde delat pretezovani dle navratoveho typu v C++). Jedine co je schopen udelat je provest implicitni deklaraci podle parametru se kterymi byla funkce zavolana, coz samozrejme muze byt spatne.
Re: pascal
celé vláknoJá teda nevím, študovanej nejsem, pro Vás "prototypy je možné úplně vynechávat" možná znamená něco jiného než "nikdy je není třeba psát" nebo "kdykoli se bez nich obejdu". Pro mě ale ne; a lidi, co Cčko třeba tak dokonale neumějí (a dalo by se argumentovat, že jakákoli sdělení tohoto typu budou určena především (!) jim), může taková věta dokonale zmást.
Pokud ho "nevytrhnu z kontextu" já, udělá to někdo jiný, to se klidně vsaďte. Třeba student před zkouškou. A když si to spojím s tím, co tu jednou Mikuláš Patočka psal o tom, jaké neuvěřitelné novoty studenti občas sdělují pedagogům u zkoušek, viděl bych od pedagoga takové prohlášení, jaké jste tu udělal, ne jako lenost, ale jako holou nezodpovědnost.
Re: pascal
celé vláknoTail cally
celé vláknoRe: Tail cally
celé vláknoRe: Tail cally
celé vláknokdyby sem snad jeste nekdo zabloudil: NENI.
tail rekurze je pouze jednim z pripadu tail-call optimalizace, a ono rozbaleni na smycku je pouze prirovnani.
lepe receno rozbalenim na smycku je pouzitelne pouze pro tail rekurzi.
tail call eliminace (optimalizace) je obecna transformace uplatnitelna v pripade ze funkce vraci hodnotu primo ziskanou volanim jine funkce. pak je mozny parametry rovnou nacpat na spravny misto pouzit skok misto vytvareni dalsiho ramce. takze tail call eliminace muze „zarolovat“ vzajemnou rekurzi nekolika funkci nebo i treba jen nekolik nerekurzivnich vnorenych volani do jumpu a teprve posledni funkce v rade provede onen kyzeny return.

