Seite 1 von 1
Möchte jetzt mal Lisp lernen
Verfasst: Donnerstag 17. Dezember 2009, 08:21
von snafu
Vor allem Common Lisp interessiert mich. Kennt da jemand gute Tutorials oder Beispiele, Open Books, ...?
Verfasst: Donnerstag 17. Dezember 2009, 08:38
von Leonidas
Also erstmal Gratulation zur Entscheidung (oder "Einsicht", wie ein Lisper sagen würde)

Aber als Schemer muss ich natürlich einwerfen: ihh, das hässliche Lisp

Kann man versuchen, dich zu Scheme zu bekehren?
Gut also für Common Lisp brauchst du erstmal eine Implementation, SBCL hat sich zumindest im Bereich der Freien Software als populärste Implementation durchgesetzt (wenn auch nicht so wie GHC in Haskell, aber ähnlich). Daneben brauchst du einen Editor (aka emacs mit SLIME), weil glaub mir -- automatisch richtige Indentation und Klammer-Highlighting ist wirklich etwas was man nicht missen will, benutze als vim-User DrScheme, weil das so wichtig ist.
Was Bücher angeht:
Practical Common Lisp ist für den Anfang gut, danach könnte
On Lisp gut sein. Die Common Lisper in der Münchner Usergroup schwören auch auf
PAIP. Dann gibt es auch noch die
HyperSpec als
die Referenz. Schließlich gibt es auch noch die
Common Lisp Quick Reference, ein echt nett gemachtes Ding, ich habe mir vor langer Zeit Revision 34 ausgedruckt (aktuell ist 109).
Verfasst: Donnerstag 17. Dezember 2009, 09:07
von snafu
Leonidas hat geschrieben:Kann man versuchen, dich zu Scheme zu bekehren?
Durchaus möglich. Ich habe nur noch nicht ganz erkannt, welche Vorteile Lisp gegenüber Scheme bringt. Ist es denn ein Nachteil, Scheme ohne Lisp-Kenntnisse zu lernen?
Verfasst: Donnerstag 17. Dezember 2009, 09:17
von snafu
Gibt es eigentlich einen Aufsatz für die sbcl-Shell, ähnlich wie IPython? Mich nervt beim Probieren ein bißchen, dass keine automatische Einrückung gemacht wird.
Verfasst: Donnerstag 17. Dezember 2009, 14:35
von Leonidas
snafu hat geschrieben:Durchaus möglich. Ich habe nur noch nicht ganz erkannt, welche Vorteile Lisp gegenüber Scheme bringt. Ist es denn ein Nachteil, Scheme ohne Lisp-Kenntnisse zu lernen?
Scheme *ist* ein Lisp, genauso wie etwa Common Lisp, Clojure oder Arc. Common Lisp ist auch "nur" ein Lisp, es repräsentiert Lisp nicht, denn Lisp ist eine Sprachfamilie wie etwa ML (wo es Standard ML, OCaml, Caml Light und noch einige weitere gibt) oder die C-Familie (mit C, C++, Objective-C).
snafu hat geschrieben:Gibt es eigentlich einen Aufsatz für die sbcl-Shell, ähnlich wie IPython? Mich nervt beim Probieren ein bißchen, dass keine automatische Einrückung gemacht wird.
Dazu verwendet man üblicherweise Emacs und führt dann den Code mittels "Evaluate Form" aus.
Verfasst: Samstag 19. Dezember 2009, 10:41
von sma
Der sichtbarste Unterschied zwischen CommonLisp und Scheme ist, wie jeweils das erste Argument von (f x y) ausgewertet wird. CL kennt zwei getrennte Namensräume für Funktionsnamen und Variablennamen und weiß, dass das erste Argument ein Funktionsnamen sein muss. Scheme kennt (wie Python) nur einem Namensraum und wertet jedes Argument auf die selbe Weise aus. Durch diese (und ein paar andere) Änderung gegenüber CL ist Scheme die einfachere Sprache, ohne dadurch weniger mächtig zu sein.
CL war mal berüchtigt dafür, mit seiner knapp 1000 Seiten starken Dokumentation eine gewaltige Funktionsbibliothek mitzubringen. Inzwischen ist das aber nichts und Python, Ruby und insbesondere Java oder C# bringen deutlich größere Bibliotheken mit, die zudem auch wesentlich besser an die Bedürfnisse heutiger Probleme angepasst sind.
CL hat ein integriertes Objektsystem namens CLOS (manche sprechen das Ziehloss aus, ich fand allerdings immer, es kein Kloss) das in dem Buch "The Art of the Meta Object Protocol" beschrieben ist und ein Meilenstein der Flexibilität war. Für Scheme gibt es da keinen Standard und diverse Spielarten von Objektorientierung sind verfügbar.
Ein elegantes und modernes Lisp war übrigens Dylan (bevor man der Sprache eine Pascal-Syntax übergestülpt hat), welches ein praktikables Objektsysteme hatte, welches das Vorbild für Pythons Vererbungsstrategie ist.
Das vielleicht aktuell interessanteste (weil modernste) Lisp ist IMHO Clojure, eine Neuimplemetierung auf der Basis der JVM speziell für nebenläufige Programmierung. Vorteil der JVM ist, dass Clojure dadurch Zugriff auf einen Berg von Java-Bibliotheken hat und z.B. auf standardisierte Weise Webanwendungen erstellbar sind, die man dann in einem Java Application Server deployen kann. Es gibt übrigens auch Armed Bear CommonLisp (ABCL) sowie diverse Scheme-Dialekte für die JVM. Da ist dann aber IMHO die Java-Integration nicht so stark.
Stefan
Verfasst: Samstag 19. Dezember 2009, 12:21
von Leonidas
sma hat geschrieben:CL hat ein integriertes Objektsystem namens CLOS (manche sprechen das Ziehloss aus, ich fand allerdings immer, es kein Kloss) das in dem Buch "The Art of the Meta Object Protocol" beschrieben ist und ein Meilenstein der Flexibilität war. Für Scheme gibt es da keinen Standard und diverse Spielarten von Objektorientierung sind verfügbar.
In meinen
Scheme rocks-Slides hab ich die sogar mal aufgelistet. Dabei ist schon interessant dass die Objektsysteme von CLOS-artig, über Prototypenbasiert bis hin zu Message-Passing wie in Smalltalk reichen. Scheme sieht wie die perfekte Sprache zum Vergleich von Objektsystemen aus
sma hat geschrieben:Ein elegantes und modernes Lisp war übrigens Dylan (bevor man der Sprache eine Pascal-Syntax übergestülpt hat), welches ein praktikables Objektsysteme hatte, welches das Vorbild für Pythons Vererbungsstrategie ist.
Sowas war auch für BitC geplant, bevor es eingestampft wurde.