Lisp lernen für Anfänger

  • Ersteller Ersteller Dexter1997
  • Erstellt am Erstellt am
D

Dexter1997

Gast
Hallo Freunde. Ich würde gerne Lisp lernen. Soweit ich weiß, gibt es hunderttausend Varianten von Lisp. Welche würdet ihr mir als Lisp-Anfänger empfehlen?
 
Ich empfehle dir sehr Racket und Clojure.

racket ist akademischer, aber ein moderner Scheme Nachfolger mit hervorragendem Lehrmaterial.
https://racket-lang.org/

Clojure ist auch super modern, hat ein grandioses Tooling und ist in der Industrie deutlich verbreiteter.

Gutes Lehrmaterial gibt es auch dafür, ich empfehle dir folgende Seite.

https://www.braveclojure.com/
 
Clojure sieht interessant aus. Hab gelesen daß das objektorientiert ist. 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ß?
 
Ich kann nur auf meine Signatur verweisen.
 

Anhänge

  • sicpsigned.jpg
    sicpsigned.jpg
    744,1 KB · Aufrufe: 459
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.
 
Zurück
Oben