"infixové operátory by nebylo možné předávat jako parametry do jiných funkcí atd"
preco nie? btw su jazyky v ktorych je mozna aj infixova aj prefixova notacia, napriklad v F#
(+) 1 1 //prefixový zápis
1 + 1 //infixový zápis
a tiez sa dajú predávat ako parameter
[1;2;3] |> List.reduce (+) //spocita vsetky polozky zoznamu
pretoze kazdy operator je funkcia (tak ako v Clojure) takze si mozem trebars aj nadefinovat novy operator "+" - ktory bude odcitat :P
let (+) a b = a - b
1 + 1 // 0
F# a clojure su velmi podobne jazyky akurat F# ma omnoho volnejsiu syntax (vacsinu zatvoriek si dokaze doplnit compiler na zaklade odsadzovania) na druhej strane Clojure ma vyhodu ze je dynamicky z coho vyplyva kopec dalsich vyhod.
Clojure se mi hrozně líbí, ale roky a roky práce investované do Common Lispu, jeho kompilátorů, nástrojů a featur bude dohánět jen stěží...
Rozsáhlý Java ekosystém, vývojáři znalí největších předností (a nedostatků) Common Lispu a toho, jaké klade moderní software požadavky na použité nástroje, to všechno hraje Clojure neskutečně do karet. Ale pokud jde o vyspělost a "ověřenost v bitvách", tak tam má Common Lisp pořád ještě navrch a proto Clojure sleduju sice se zájmem, ale zatím jenom z povzdálí. :-)
On prave ten Java ekosystem do znacne miry nahrazuje praci, kterou museli lidi vlozit do vyvoje CL. Osobne si myslim, ze tudy povede i cesta dalsich jazyku - namisto nad HW (+ nejake vrstvicce ala libc/glibc...) budou postaveny na VM (idealne JVM, treba i Parrot VM jestli se konecne prosadi), takze se nebude muset resit optimalizujici prekladac, GC, knihovny pro GUI a ja nevim co jeste budou VM+RE nabizet.
jinak nic proti CL, to je proste poradny tezkotonazni stroj, pekne se s nim da vyhrat (makra, CLOS..,)
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.)