niedziela, 13 lutego 2011

Lisp - początki

W celu rozwoju osobistego postanowiłem nauczyć się jakiegoś nowego języka programowania. Oczywiście aby nie było za łatwo postanowiłem wybrać język o innej składni i paradygmacie niż obecnie znane mi języki (które są C-podobne). Ostatecznie zdecydowałem się na Lisp (a tak dokładniej to dialekt Common Lisp).

Dlaczego akurat Lisp?

Lisp Cycles - xkcd.com
Może najpierw trochę o Lisp, jest to język wieloparadygmatowy (funkcyjny, obiektowy, proceduralny i inne) o dynamicznym, silnym typowaniu, którego składania oparta jest na S-wyrażeniach (struktura oparta na listach). Cechą charakterystyczną tego języka są nawiasy (wszystko jest w nich zamknięte). Dlaczego zdecydowałem się go nauczyć? (Bo lubię nawiasy :)) Składnia wygląda (moim zdaniem) przyjemnie oraz mogę się uczyć z dostępnej za darmo książki Practical Common Lisp.

Po wyborze języka i dialektu musiałem się zdecydować na jakąś implementację (a jest ich kilka), ostatecznie wybrałem CLISP (nie posiada kompilatora ani wsparcia dla wątków ale nie sprawia problemów więc na razie wystarczy). Natomiast jako IDE używam zestawu Emacs+SLIME (moje pierwsze starcie z Emacsem więc dodatkowo dochodzi nauka edytora).

Dopiero zaczynam jednak muszę przyznać, że sam język podoba mi się coraz bardziej. Największe wrażenie (do tej pory) zrobiły na mnie makra. System makr w Common Lisp działają zupełnie inaczej niż preprocesor w C który zastępuje tekst innym tekstem. W Lisp makra są kodem generującym inny kod, nie operują na tekście tylko na S-wyrażeniach co pozwala na naprawdę duże zmiany w składni (oczywiście jeżeli ktoś ich potrzebuje). Przykładem takiego makra w bibliotece standardowej jest LOOP.
;;Suma liczb od 1 do 10
(loop for x from 1 to 10 summing x)

;;Liczenie samogłosek
(loop for x across "the quick brown fox jumps over the lazy dog"
      counting (find x "aeiou"))

;;Liczenie 11 wyrazu ciągu Fibonacciego
(loop for i below 10
      and a = 0 then b
      and b = 1 then (+ b a)
      finally (return  a))
Trzeba przyznać, ze składnia makra LOOP jest niezwykle wymowna i nawet bez znajomości Lisp można zrozumieć o co chodzi.

Realizuje swoją strategię nauki czyli czytam książkę, analizuję i modyfikuję przykłady a na koniec napiszę coś samodzielnie (nie wiem jeszcze co). Muszę przyznać, że przejście na inną składnię niż C-podobną (do tej pory używałem C++, C#, PHP) jest całkiem przyjemne i myślę, że Lisp będzie przeze mnie często używany.

Brak komentarzy: