(seq? [1 2])
vrací false
, zatímco (seq? '(1 2))
-> true
. Jak píšou na clojure.org:
"Clojure uses the ISeq interface to allow many data structures to provide access to their elements as sequences...."
... copak to pro vektory neplatí?Jo jeste dodam, ze funkce pro praci se sekvencemi 'magicky' pracuji i s vektory, napriklad first bude pracovat, protoze si sama zavola seq na svuj argument:
user=> (doc first) ------------------------- clojure.core/first ([coll]) Returns the first item in the collection. Calls seq on its argument. If coll is nil, returns nil.
ISeq
je abstrakce kolekce, u které se očekává jen sekvenční průchod a ne efektivní přístup podle indexu, ani zjištění počtu prvků apod. Je to to co dostanu, když na něco zavolám seq
, nebo když mám lazy sekvenci.
V běžném kódu se seq?
(ani sequential?
apod.) myslím moc neužije :-)
Clojure je bohužel poměrně nepovedený jazyk. Sice syntaxi má pěknou. Přístup ke všem knihovnám Javy je také pěkný ale ... error zprávy jsou naprostá hrůza. To není produkční nástroj, to je hračka. Na člověka tam padají Javovské exceptions, kterým ani není často moc rozumět, a když už je, tak zase prozměnu člověk neví jak se tam vzali.
Dokumentace také není moc pěkná.
Co byste řekli, bude fungovat
(r/fold #(+ %1 %2) '(8 5 9 6 4 8 8 5 1 4 8 9 6 5 4 7 8 5 4 7))
nebude a spadne nám na hlavu nečitelná exception ...
(r/fold + '(8 5 9 6 4 8 8 5 1 4 8 9 6 5 4 7 8 5 4 7))
todle už funguje, cajk. Čekal bych že foldfun bude brát akumulátor a aktuální hodnotu, fold v podání clojure na to má ale jiný názor ...
A podobných WTF momentů jsem zažil několik až jsem nakonec Clojure zahodil ...
Zkouseli jste https://github.com/mmcgrana/clj-stacktrace ? Neocekavejte zazraky, ale oproti puvodnim ST je to posun vpred dost znacny.
Co tedy nebude dobre fungovat jsou makra :/
Podle mě je ta hláška, kterou to na tebe vykřikne u toho tvého příkladu úplně jasná...
"CompilerException clojure.lang.ArityException: "
"combinef must be associative, and, when called with no arguments, (combinef) must produce its identity element."
... což ta tvoje anonymka holt nesplňovala.
Navíc u téhle knihovny bych byl schovívější a neurážel se hned na ní, když mám v dokumentaci... "Alpha and subject to change."
;-)
No jo, blbě jsem četl.
Je to ale padlí na hlavu, zbytečně to komplikuje práci.
Ve FP paradigmatu se opravdu velmi často používají funkce map, filtr, fodl, fodlr a tak, označit knihovnu s jednou touhle funkcí jako Alpha je vymatlaný (a vymatlaný je i takhle blbě fold navrhnout ...), nehledě na to že je ta knihovna v tomhle stavu už pěkně dlouho...
Error zpráva jen řekla, je blbá arita, konec, neukázala jaký výraz to způsobil, jakým výrazem byl daný výraz obklopen popřípadě stack trace či další metadata o chybě ... v LISPech je obvyklé že po chybě je okamžitě spuštěn debugger, u clojure mám pochybnosti jestli zabudovaný debugger vůbec existuje...
Ten jazyk je hračka, já jsem přepracovaný programátor, potřebuju maximální podporu od platformy na které vyvíjím, když ji nemám, ať jde jazyk do pekla.
Joo to kdyby clojure nabídl plnohodnotný debugger, kvalitní error reporty, oficiální podporu (implementátora jazyka) Androidu, integrovaný profiler a kvalitní IDE opět od tvůrce jazyka, věřím že clojure by se prodral raketově nahoru. Třeba já osobně nemusím Javu, kdybych ale mohl pro Android dělat v LISPu (pohodlně !), no kurva jo, to by bylo super. Ano, v clojure jde nyní dělat i App pro Android, ale je to ... opět jen hračka, není to profesionálně použitelné co sem koukal.
"Ten jazyk je hračka, já jsem přepracovaný programátor, potřebuju maximální podporu od platformy na které vyvíjím, když ji nemám, ať jde jazyk do pekla."
A to si zase myslím, že není problém jazyka ani komunity okolo něj, spíš prostě patříš do "nekompatibilní" skupiny (nic ve zlém). Mě to třeba osobně až tak netrápí, že to není mainstreamový jazyk, spíš naopak - kdo teď dělá v Clojure, tak je u něj celkem jistota, že mu to pálí, takže diskuse jsou na úrovni (to bohužel fóra s Javou jsou za....ná bastliči až hrůza :-D)
Dtto komunity vývojářů v asm (malé velmi profesionální skupiny lidí, ano není to mainstream :-)
Jo já používám Clojure profesionálně, ale je pravda, že ne na Androidu (servervové aplikace běžící na Linuxu, ale velmi pravděpodobně by bez úprav valily i jinde).
Jak říkám, to není problém, LISPovské jazyky asi nikdy nebudou mainstream a dá se s tím právě z tohoto důvodu vyžít velmi dobře.
A upřímně - možná právě proto, že dost prgám v Clojure, tak přepracovaný nejsem, práce mě baví, výsledky jsou a projekty to nejsou takové ty klasické "enterprise" nesmysly, kde se opravdu víc tlačí na termíny a programátoři jsou vlastně zedníci...
Aha tak to bylo jednoduchy:
http://www.paulgraham.com/avg.html
"After a couple years of this I could tell which companies to worry about and which not to. The more of an IT flavor the job descriptions had, the less dangerous the company was. The safest kind were the ones that wanted Oracle experience. You never had to worry about those. You were also safe if they said they wanted C++ or Java developers. If they wanted Perl or Python programmers, that would be a bit frightening-- that's starting to sound like a company where the technical side, at least, is run by real hackers. If I had ever seen a job posting looking for Lisp hackers, I would have been really worried."
Je to starsi clanek, takze s/Lisp/Clojure :)