Dienstag, 11. Januar 2011

Ein Blick über den Zaun: Lisp

Ein Blick über den Zaun kann sehr interessant sein. Manchmal ist das Gras grüner und saftiger, machmal sieht man mehr Steine als Gras und selten schimmert das Gras in psychedelisch angehauchten Farben. So ein Fall ist LISP, eine dynamisch typisierte Programmiersprache die wohl älter ist als die meisten Leser dieses Blogs: Geburtsjahr 1958.

LISP ist als der Ur-Typ der funktionalen Programmierung gerade heute wieder interessant und bietet einen interessanten Blick auf diese für PHP doch eher fremde Thematik.

Lisp?

Vereinfacht gesagt ist jedes Objekt in Lisp eine Liste, die syntaktisch durch runde Klammern begrenzt wird. Einzige Besonderheit: Das erste Listenobjekt legt fest, was mit den Daten in der Liste gemacht werden soll.
Ein Kommentar wird mit einem Semikolon ";" eingeleitet.
(+ 2 4 8 9) ; eine Addition über alle Listenelemente wird durchgeführt
            ; das Ergebnis ist 23

(max 2 3 4) ; sucht das größte Element aus der Liste
            ; das Ergebnis ist 4
Eine weitere Besonderheit ist das einfache Anführungszeichen das verhindert, dass ein Listenobjekt als normale Informationseinheit verwendet wird. Auf diese Weise können beispielsweise mit dem Befehl "set" Variablen definiert werden. (Alternativ gibt es den Befehl setq)
(set 'meinwert (+ 25 30) )
(setq var 100)
(+ meinwert var)
Praktisch jede Liste kann andere Listen als Elemente enthalten.
(max 2 3 (+ 2 4 8 9) )
Natürlich bietet Lisp auch die gängigen Funktionalitäten und Kontrollstrukturen und eben das was funktionale Programmierung ausmacht - was aber an dieser Stelle leider (viel) zu weit führen würde.

Leider schrecken viele Webseiten und Dokumentationen zu diesem Thema eher ab, aber auch hier gibt wahre Perlen:
newLISP (http://www.newlisp.org/) ist eine schlanke und einfache Implementierung. Die dortige "Introduction to newLISP" (in englischer Sprache) ist das beste und verständlichste was ich bisher zu dem Thema LISP gelesen habe und sei jedem Interessiertem als Einstieg empfohlen.

Keine Kommentare:

Kommentar veröffentlichen