LISP er vakkert


fredag 18. juni 2010 Lisp Clojure

Jeg skulle egentlig lært meg F# for tiden, men språket Clojure distraherer meg. I går satte jeg meg ned og lærte meg det grunnleggende, og nå er det umulig å få sove!

Dermed skriver jeg denne lille "rant" for å forsøke å tømme hodet og komme meg til sengs igjen.

Clojure er en LISP. Lisp var et av de aller første programmeringsspråkene, spesifisert allerede i 1958, og er fortsatt i bruk i dag selv om det har endret seg endel opp gjennom årene.

Lisp var inspirert av Alonzo Church's lambda calculus, og er dermed det språket alle de funksjonelle programmeringsspråkene (som for eksempel Haskell, OCaml/F# og Erlang) stammer fra. Det var også Lisp som innførte dynamisk typing, og alle de dynamiske språkene stammer således også fra Lisp.

Common Lisp og Scheme er de to mest populære Lisp-dialektene, mens Clojure er den nyeste. Clojure kjører på Java-plattformen, og en .Net-implementasjon er i en tidlig beta.

Så hva er det som er så distraherende med Clojure/Lisp?

For det første er det veldig anderledes enn alle andre språk jeg har vært borti. Det har helt klart paralleller til Erlang og F#, som jeg har jobbet litt med i år, men det er likevel svært ulikt dem også. Lisp-kode er data, en liste med instruksjoner og verdier, og denne listen kan manipuleres av programmet selv. Lisp er egentlig veldig enkelt – det har begrenset kompleksitet – men ut fra de enkle byggestenene kan man få til de mest utrolige ting.

Etterhvert som man klarer å flytte blikket bort fra alle parantesene, og begynner å skjønne hva som foregår, ser man hvor elegant Lisp er. Og man (dvs. nerds som meg) begynner å omtale det som estetisk og vakkert.

1 ; Clojure version of alorithm discussed in blog post
2 ; /2010/05/04/parallellisering-av-en-algoritme-i-erlang/
3 ;
4 (defn sum
5       "Sums multiples of 3 or 5 up to a limit"
6       [limit]
7       (def dividable-by
8            (fn [x n] (= (rem n x) 0)))
9       (def the-sum
10            (apply + (filter
11                       (fn [n] (or
12                                 (dividable-by 3 n)
13                                 (dividable-by 5 n)))
14                       (range 0 limit))))
15       (println "The sum up to" limit "is" the-sum))
16
17 ; Call the sum function
18 (sum 1000)
19 (sum 2000)

Jeg knytter forresten følelser til alle programmeringsspråk. Og assosierer dem med farger, musikk og andre ting knyttet til sinnsstemninger. Lisp/Clojure forbinder jeg nå med flytende, munter klassisk musikk. Lisp er noe strømlinjeformet og smidig, som en sportsbil med myke former. Lisp er rolig, avslappet, og har et smil på lur.

Time-out, time-out!!! Hva er det han holder på med nå da? Hvor kommer alt dette klissete new-age, flower-power tullet fra?

Slapp av, det har ikke rablet for meg. Men det er som sagt midt på natten, jeg skulle ha sovet, og da får jeg gjerne noen litt uvanlige perspektiver på ting. Jeg vet ikke hvor dette med følelser knyttet til programmeringsspråk kommer fra, eller hva som styrer det, men jeg vet at det påvirker meg. Det styrer hva jeg ønsker å jobbe med og studere nærmere, og hva jeg ikke vil drive med.

Kanskje påvirker det også humøret mitt mer enn jeg er klar over. Burde vi i større grad la følelsene knyttet til våre primære verktøy styre hvilke verktøy vi bruker.., kan det være instinktet vårt forsøker å fortelle oss noe som vi enda ikke klarer å artikulere?

Er det noen andre som har slike tanker?


comments powered by Disqus