Opět bezvadná série. Dobrá práce, Pavle, díky!
Jenom drobný poznámky (většinou překlepy):
"podpora pro datového typu"
Není pro "form" v češtině zaužívaný pojem "formule"? Jako "forma" (ani "formulář" ;) bych to nepřekládal.
Ampersand -> apostrof, to už tady zaznělo
duplikátní -> duplicitní
Není zbytečný psát pořád dokola Closure, Lisp atd. italikou? Při čtení to trochu ruší běh odstavce...
Některý věci se možná zbytečně opakují (už zazněly v předchozím dílu).
> Pomocí běžných funkcí by nebylo možné tuto funkcionalitu splnit, protože by se kód (předaný jako parametr – jinou možnost v Clojure ostatně prakticky nemáme) vykonal ještě před zavoláním „podmínkové“ funkce.
Jde to udělat i pomocí lambdy, ne? Speciální "if-funkce" imho nezbytně nutná není.
Ale to jsou jenom drobný výhrady, jinak fakt super práce a ještě jednou za ni dík.
Jak by se dala specialni forma (formule?) "if" vytvorit pomoci lambdy? Me to dost zajima, protoze jsem premyslel o tom, jestli by slo udelat lisp-like jazyk bez spec. forem. Neco podobneho ma TCL, ale tam je to jaksi vsechno naopak - cely seznam se automaticky quotuje, takze se musi spustit explicitne. Tam asi spec. formy nepotrebuji, kdyz je to interne vsechno retezec, ale LISP/Clojure?
Imho by to slo minimalne tak, ze by ten if byla specialni zabudovana funkce (takze minimalne syntakticky by to nic specialniho nebylo):
if (podminka, lambda x,y: neco_pokud_ano(x,y), lambda a,b: neco_jinyho_pokud_ne(a,b))
Kdyby to nemela byt ani zabudovana funkce, tak by se to nejspis dalo zrealizovat za podminky lineho vyhodnocovani: (podminka) and (lambda x,y: neco_pokud_ano(x,y))
Syntakticky je to samozrejme nepohodlny, ale jde to.
Diky za pripominky, italiku jsem v dalsi casti omezil (pokud jsem to nekde nezapomel, tak je u kazdeho terminu pouzita jen u jeho prvniho vyskytu). Ampersand uz by se taky nemel vyskytovat - za to se stydim, ale zase psat v podkrovnim byte s 33 C, to uz opravdu mozek vynechava :-)
*if* jako specialni forma (formule?) nutny neni, slo by to resit pomoci makra a specialnich forem *and* a *or* - myslenka v clanku byla takova, ze podporu specialnich forem v LISPovskych jazycich potrebujeme, protoze se automaticky vyhodnocuji parametry, coz ne vzdy chceme (krome if je prikladem i makro while pro smycku, def/defun/define/let atd.)