Eines vorweg:
Lisp gibt heutzutage in zwei unterschiedlichen Varianten. Einmal in Form von
Common Lisp, was auch ein ANSI Standard ist und salopp gesagt aus früheren Lisp-Varianten hervorgegangen ist.
Da es
Common Lisp schon eine Weile gibt, ist es auch entsprechend ausgereift.
Auf der anderen Seite gibt es dann die Lisp-Varianten, die man als
Scheme bezeichnet. Scheme zeichnet sich durch einen gewissen Minimalismus aus. Man versucht halt mit minimalen Sprachmitteln das Maximum herauszuholen. Außerdem verschreibt sich
Scheme eher dem funktionalen Stil (auch wenn der da nicht festgeschrieben ist) als
Common Lisp, welches doch auch sehr
imperativ geprägt ist (wenngleich es auch hier nicht festgeschrieben ist).
Während
Common Lisp ziemlich durchstandardisiert ist, gibts von
Scheme relativ viele Varianten. Wobei es auch hier einen Standard gibt. Mit
RnRS bezeichnet. Wobei für das 'n' die jeweilige Versionsnummer steht. Die neuste Iteration ist
R7RS.
Das hier schon genannte
Racket ist auch einer ein Scheme-Derivat. Es gibt ein paar Unterschiede zu
Scheme (
Racket setzt noch mehr auf immutable Data, es kennt nicht nur
Continuations, sondern auch delimited Continuations).
Was
Racket zu gut zum lernen macht ist, dass es schon eine durchaus sehr hilfreiche und einfach zu bedienende IDE mitbringt. Die Dokumentation ist (wie schon genannt) sehr gut. Und es gibt zahlreiche Bibliotheken, was
Racket zur komplettesten
Scheme-Variante macht.
Racket unterstützt auch mehr als
Scheme sowieso die Entwicklung neuer Sprachen. So gibt es zum Beispiel auch ne statisch typisierte Variante von
Racket.
Auch zu Common Lisp gibts natürlich gute Dokumentationen. Das bereits genannte
SICP ist da sicher das bekannteste Werk.
Wobei Bücher wie
Practical Common Lisp oder auch
Land of Lisp einen eher leichteren, praktischen Zugang zu
Common Lisp bieten und daher im ersten Schritt vielleicht sogar vorzuziehen sind.
Eine weitere wichtige Quelle zu
Commin Lisp ist:
cliki.net
Dexter1997 schrieb:
Clojure sieht interessant aus.
Ja.
Clojure ist ein relativ junger Lisp-Dialekt und ist eher
Scheme zuzuordnen als
Common Lisp, wenn gleich es kein
Scheme-Dialekt ist. Aber die Ähnlichkeiten der Konzepte liegt mehr in Richtung
Scheme als
Common Lisp.
Dexter1997 schrieb:
Hab gelesen daß das objektorientiert ist.
Das kann ich ganz klar verneinen. Du kannst natürlich
Java-Klassen nutzen und die
Java-Interoperatibilität ist natürlich gegeben. Ansonsten pflegt
Clojure eher ein funktionen Stil. Es werden auch ein ganzes Set an Datentypen die Clojure-exklusiv sind eingeführt, um dem Rechnung zu tragen (nämlich vor allem immutable data structures die ja sozusagen der Gegenentwurf sind zu veränderlichen Objekten).
Die Art der Programmierung unterscheidet sich damit deutlich von
Java.
Dexter1997 schrieb:
Ist das wie in Java, das man gezwungen wird objektorientiert zu programmieren, und alles in irgendwelche Klassen zu packen? Oder ist Clojure so wie Javascript - also daß man objektorientiert Programmieren kann, es aber nicht muß?
Du kannst in
Clojure natürlich auch Objekte erzeugen. Aber der Schwerpunkt liegt ganz klar beim funktionalen Programmieren. Sonst profitiert man auch von vielen Sachen (z.B.automatische parallele Ausführung von Code) nicht.
Ob man nun
Common Lisp,
Scheme/Racket oder
Clojure lernt hängt ganz von dem eigenen Schwerpunkt ab.
Wenns ums Lisp lernen geht und vor allem darum, was Lisp ausmacht ist
Scheme bzw.
Racket sicher eine gute Wahl.
Und
Racket ist, obwohl ursprünglich als Lehrsprache gedacht, nicht darauf beschränkt.
Clojure punktet mit seiner Integration in die Java-Welt und interessanten Konzepten für Parallelprogrammierung.
Common Lisps Stärke ist die Ausgereiftheit. Und mit
SBCL und
emacs/SLIME steht einem auch hier eine sehr gute IDE zur Verfügung.