Pekny, pre zaciatocnika mozno vhodnejsi, je dialekt LISPu -- Scheme [ http://www.schemers.org ], ktory ma viacero implemenetacii, napr. guile pouziva GIMP. Najcastejsie sa vsak natrafi na MIT Scheme a zaujimavy, ale IIRC bohuzial iba pre windows je Dr. Scheme. Este mi neda, nespomenut krasnu kontrukciu "continuations", ktore som okrem jazykov z rodiny LISP inde nevidel. Co sa tyka first a rest je to hnus. :) Skalny pouzivaju car a cdr uz len preto, ze sa to da pekne kombinovat do caar, cdar, caadr a pod. ;)
I dalsi jazyky maji continuations ... minimalne Ruby :-)
"Kernel::callcc":
Generates a Continuation object, which it passes to the associated
block. Performing a cont.call will cause the callcc to return (as
will falling through the end of the block). The value returned by
the callcc is the value of the block, or the value passed to
cont.call. See Continuation on page 298 for more details. Also see
Kernel::throw for an alternative mechanism for unwinding a call
stack.
A nejhorší jsou LISPové jazyky. Ty potvory vám vlezou všude... ;-)
LISPový jazyk, konkrétně Scheme (a ještě konkrétněji SIOD, což je mírně svérázná implementace Scheme), je i jazyk Script-Fu v GIMPu. Naštěstí už dnes existuje Python-Fu...
Kdo používá GNOME, nejspíš má nainstalovaný Guile (opět Scheme) a ani o tom neví.
A kdyby člověk zakutal, asi ještě na disku nějaký další LISP (resp. jeho příbuzného) najde...
Python-Fu === Script-Fu (mod jazyk)
Tj. liší se jen jazyk. Takže jestli je Script-Fu skvělý nástroj (což je), tak je Python-Fu také -- proto moc nechápu tu výhradu.
Já sice v LISPu (teda Scheme) něco stvořím, když na to dojde, ale pokud mohu mít přesně totéž, ovšem v Pythonu, tak je volba jasná...
volba je jasna.. ale v mem pripade je to lisp. a to umim python i lisp stejne dobre. lisp je ale kompatibilnejsi s mym zpusobem uvazovani. to je ale asi individualni. podstatne je vstk to ze script-fu je interni soucasti gimpu takze script-fu spustite v jakekjoliv instalaci gimpu na planete. python -fu jpotrebuje externi python ... takze vyuziti je omezeno
guile je supr! jako vestaveny jazyk do programu... navic umi k sobe pripojovat dalsi ceckove fce, proste krasa.
sveho casu jsem si v guilu napsal simulaci jazyka XQuery, ktery jako datovy sklad bral MySQL... opravdu prasarna ;-)
na prvni pohled jsou ty zavorky totalni peklo, ale na druhy pohled, kdyz clovek zjisti co jde vyvadat s pomoci max 10 konstrukci jazyka, zmeni nazor
(chybi vam for-cyklus ala pascal, neni nic lehciho nez si ho napsat...)
btw. cetl jsem clanek od R.M.Stallmana, kde obhajoval, ze na skriptovani v aplikacich by se nemel pouzivat TCL ani nic jineho, ale prave scheme, protoze v nem jdou nasimulovat dalsi jazyky - a je to tak
Seznamy nejsou ve skutečnosti zabudovány přímo v interpreteru LISPu. Tam jsou "pouze" tečka-dvojice a seznamy jsou pouze zkráceně zapsané tečka-dvojice - ušetří se závorky, tečky a závěrečný nil. Nad tím existuje pár příkazů, zejména cons, car a cdr, no a s nimi se už dá vystavět slušná knihovna pro práci se seznamy.
To zcela jiste. Ale pomoci tecka dvojice se daji velmi jednoduse vytvorit i slozitejsi (nelinearni) datove struktury, napriklad strom, zasobnik, tabulka, graf.
Take je IMHO dobre vedet, jak ty seznamy vypadaji zevnitr, tj. jak funguji funkce cons, car, cdr a jak LISP napriklad pozna konec seznamu.
Jazyk Dylan (DYnamic LANguage) bol navrhnuty firmou Apple Computer Inc. Podla sloganu vznikal ako pokus ziskat nieco tak mocne ako Lisp a take rychle ako C. Kvoli tomu sa vzdal niektorych crt ako napr. moznost explicitne volat eval. Niekde na polceste vyvoja stratil aj zatvorkovu prefixovu syntax a nahradil ju infixovou.
Verzia pre linux je dostupna na http://www.gwydiondylan.org (FreeBSD ju ma v portoch), pre windows mozno pouzit http://www.fun-o.com
Kdyby se nasel nekdo uchylnej, tak mu muzu poslat Scheme do mobilniho telefonu napsanyho v Jave. Je to R4RS kompatibilni (umi to i ty continuations..). Portnul jsem to tedka v sobotu ze zdrojaku jscheme. Je to celkem sranda, ale psat zavorky na mobilu je des - jedna zavorka == 10x zmacknout klavesu 1 :))
Pre tych, co sa chcu LISP skutocne naucit:
Predovsetkym si zakazte pouzivat (set ...).
Nepouzivajte formy ako (prog ...) a podobne.
Vsetky cykly robte rekurzivne.
To vas nauci clenit si program omnoho lepsie ako 150
kurzov o spravnom strukturovanom programovani.
Ak robite cykly ako rekurzivne funkcie,
musite si kazdy cyklus nejako nazvat. To vas nauci
nazyvat premenne tak, aby ste vedeli aj o dva dni
co ten cylkus robi.
Namatkou: elisp je case sensitive, vsechny symboly maji dynamic scope, znaky jsou ztotoznene z cisly (a cisla jsou pouze kratka), chybi spousta standardnich funkci (ale mnoho z nich je v balicku cl.el), na druhou stranu ma elisp navic datove typy a preddefinovane funkce pro veci spojene s praci editoru.
Konečně :) Tak a teď ještě aby to mělo co nejvíc dílů. Nebo bych se taky mohl pustit do těch čtyř LISP e-booků, co se mi válejí na HDD. Semestrální projekt, na kterém jsem dělal, měl výstup do OCML, což je postaveno nad LISPem...geniální jazyk. Ať žije! (A za ctyři roky můžeme slavit jubilanta :)
Netřeba. K tomu mám sklony už teď. Zrovna včera nás na Matematice 6c přesvědčovali, že imperativní köd s while cyklem, programz pro Turingův stroj, parciální rekurzivní funkce a lambda kalkulus jsou ekvivalentní zápisy...a my jim to po několika tabulích lambd uvěřili :)