Ričard ::O daaa, pišu pa pršti. Pa onda ne webu recimo postave stranicu od par stotina Mb, pa se čude zašto se sporo učitava.
Elem, bandere i konstrukcije... Neće niko da se bruka da mu padne bandera, plus niko ti sa 100% sigurnosti ne može reći da materijal koji je projektovan, bude i ugrađen. Ne da ga izvođači je žele ugraditi, nego svako mešetari sa robom, u ovom slučaju sa čelikom.
Na žalost, imao sam prilike da vidim kako radi firma koja pravi baš bandere i mogu da se kladim da oni koji rade tamo ne znaju da proračunaju ni banderu. Jer ih mahom poznajem. Mešetari se, to je sigurno, zato se uzima stepen sigurnosti. Zato se vrši provera robe na ulazu i izlazu, traže atesti. Naravno, u normalnim okolnostima... Dok neko ne završi na robiji, neće se uozbiljiti.
Ovih dana sam ponovo nabasao na Clojure i reših da se malo ozbiljnije poigram sa njim. Čitajući o istoriji Lisp-a neverovatno mi je koliko je potcenjen jezik, a koliko je uticaja imao na jezike koji su danas mnogo popularniji od njega.
Sad uzeh da uradim ovaj zadatak: napisati funkciju koja prima jedan parametar. Ova funkcija treba da vrati drugu funkciju koja prima x broj parametara, primenjuje f nad njima i poziva not na rezultatu. Rešenje je sledeće:
(defn opposite [f] (fn [& args] (not (apply f args))))
+ Objašnjenje
Lisp koristi takozvanu prefiks notaciju, pa umesto 2 + 3 naprimer pišemo (+ 2 3). Osnovne strukture podataka u Lispu su liste i atomi, a u ovom slučaju + bi bio atom, 2 i 3 argumenti, a sve unutar zagrade lista.
Pomoću (defnime_funkcije [parametri] telo_funkcije) definišemo novu funkciju. Parametre unutar uglastih zagrada odvajamo razmacima. & ispred args označava da je args lista više argumenata.
Pomoću (fn [parametri] telo_funkcije) definišemo anonimnu funkciju.
apply je funkcija koja kao prvi parametar prima funkciju, a kao ostale prima argumente sa kojima će ta funkcija biti pozvana.
Ako ovo nije znak da sam počeo da ludim u karantinu ništa nije