Lisp

Från Unix.se, den fria unixresursen.

Lisp är ett dynamiskt, strikt, objektorienterat, funktionellt programspråk som skapades i slutet av 50-talet av John McCarthy. Nu för tiden används namnet dels för att beskriva en familj av språk som utvecklats från detta (se Dialekter nedan) och dels något imprecist som en synonym för Common Lisp.

Lisp var det första programspråket som införde if-satser, funktioner som en datatyp, rekursion, automatisk minneshantering, och mycket annat som på senare tid allt eftersom introducerats i mer populära språk. Det som främst utmärker det i dag (jämfört med avancerade skriptspråk som Ruby och funktionella språk som Haskell) är dess makron och det sofistikerade objektsystemet.

Lisp är dock inget rent funktionellt språk, det går att programmera i princip i vilken stil man vill i det. Så här kan till exempel en funktion som beräknar Fibonaccital iterativt se ut:

(defun fibonacci (n)
  (loop for a = 1 then (+ a b)
    and b = 1 then a
    repeat n
    collect b))

(fib 13) => (1 1 2 3 5 8 13 21 34 55 89 144 233)

Lisp var det första språket som ANSI-standardiserade ett objektsystem (CLOS) i slutet av 80-talet. Det skiljer sig än i dag från de flesta andra sådana bland annat genom att det tillåter multiple inheritance, metodkombinering och multiple dispatch.

Makron är ett kraftfullt sätt att exempelvis utöka Lisps syntax. Exempel (skulle nog må bra av en ingående förklaring):

(defun curry (f &rest a)
  (lambda (&rest b)
    (apply f `(,@b ,@a))))

(defun open-bracket-macro-character (stream char)
  `',(apply #'curry (read-delimited-list #\] stream t)))

(set-macro-character #\[ #'open-bracket-macro-character)
(set-macro-character #\] (get-macro-character #\)))


(remove-if-not [> 2] '(1 2 3 4 5)) => (3 4 5)

Dialekter

Personer

Personliga verktyg