Ich bin ein C ++ - Programmierer, der versucht, Common Lisp zu lernen. Ich habe mir einige Bücher wie Land of Lisp angesehen und zahlreiche Online-Artikel über die verschiedenen Tugenden von Lisp gelesen. Ich brauche jedoch einen Rat.
Fast alles, was ich über Common Lisp gelesen habe, hat damit zu tun, wie erstaunlich es ist und wie erstaunlich schnell man Dinge damit erledigen kann und wie es vor 30 Jahren erstaunlich viele Probleme mit modernen Programmiersprachen gelöst hat. Außerdem, wie erstaunlich Makros sind und wie jedes Programmierparadigma (OO, funktional, akteursbasiert oder was auch immer usw.) in Lisp verwendet werden kann und wie Listen die ultimative Datenstruktur darstellen. Grundsätzlich behandelt man Lisp wie eine Forschungssprache und sagt, wie anders und revolutionär es ist.
Und all das Zeug ist wahrscheinlich wahr, aber das Problem ist, dass ich nicht viel gesehen habe, wie man praktische Dinge wie das Lesen einer Datei und das Aufteilen in Wörter und das Verarbeiten daran macht. Ich bin nicht daran interessiert, Common Lisp zu lernen, um Common Lisp zu lernen, sondern um das, was ich früher in C ++ gemacht habe, schneller und mit weniger Fehlern zu erledigen.
Meine Frage ist also, was die beste Ressource ist (sei es eine Website, ein Buch, irgendetwas), die sich darauf konzentriert, zu lehren, wie man Common Lisp verwendet, um allgemeine Programmieraufgaben wie zu erledigen
- So lesen Sie Dateien
- So lesen Sie eine Datei, ersetzen Wörter in der Datei und schreiben das Ergebnis zurück in die Datei
- Iterieren Sie die Dateien in einem Verzeichnis und anderen Dateien
- Interagiere mit einer SQL-Datenbank
- Kommunikation über Steckdosen
- Threading für Sachen wie einen Webserver
- Erstellen Sie GUIs
- Führen Sie Operationen an Binärdateien aus
- Schreiben Sie einen Parser (kein Interpreter für Lisp in Lisp, was meines Wissens 5 Zeilen Lisp entspricht).
- Interagiere mit dem Betriebssystem (dh in C oder C ++ geschriebene Dinge), um Dinge zu tun, die Lisp nicht nativ tun kann
- Wie schreibe ich Lisp-Erweiterungen in C (ist das möglich?)
- Betten Sie einen Lua-Dolmetscher ein (ist das möglich?)
Und auch in einem weniger unmittelbar praktischen Hinweis, wie allgemeine Datenstrukturen in Lisp wie Heap, Stack, binärer Suchbaum usw. implementiert werden. Dies kann jedoch nur die Listenoperationen von Lisp wie car
und cdr
auf die richtige Weise verwenden. Ich weiß es nicht.
Ich bezweifle sehr, dass all dies (mit der unwahrscheinlichen Ausnahme der letzten beiden in der Liste) mit Lisp unmöglich ist oder die Leute es nicht so sehr lieben würden. Und das oben erwähnte Zeug, das ich gelesen habe, erwähnt eine Menge realer Software, die in Lisp geschrieben wurde (Yahoo! Web Store fällt mir ein).
Nachdem ich zuvor in einer ( der? ) Imperativen Sprache programmiert habe , bin ich bestrebt, das neue Wissen zu nutzen, das ich zum Schreiben realer Anwendungen erhalte. Was ist der schnellste Weg, um das Schreiben praktischer Software mit Lisp zu lernen?
Übrigens habe ich Peter Seibels praktisches gemeinsames Lisp gesehen, aber nach dem Inhaltsverzeichnis berührt es nur einige der Dinge, für die ich lernen möchte, Lisp zu verwenden.
Noch eine Frage, wenn ich darf (Entschuldigung, wenn hier zwei Fragen zu einer zusammengefasst werden), wo finde ich einen Verweis auf die Funktionen und Dinge von Lisp?
Und ich möchte Lisp wirklich mögen.
quelle
Antworten:
Ich würde vorschlagen, " Practical Common Lisp " zu lesen , da es bereits einige Ihrer Fragen beantwortet.
Es gibt wahrscheinlich drei bis vier Bücher, die Sie lesen sollten :
Gemeinsame Lisp-Referenz
Anleitungen
Als nächstes sollten Sie das Handbuch Ihrer Lisp-Implementierung lesen. Es werden viele spezifische Erweiterungen beschrieben: Netzwerke, Threads, ...
Dokumentation für Common Lisp-Implementierungen:
SLIME (die Emacs-basierte Lisp-IDE) verfügt über ein SLIME-Benutzerhandbuch .
Dokumentation für Common Lisp-Bibliotheken:
Bibliotheken
Für Bibliotheken verwenden
Schauen Sie sich nun einige Ihrer Punkte an:
Weitere Informationen finden Sie im Wörterbuch für Dateien und Streams in HyperSpec . WITH-OPEN-STREAM, READ, READ-LINE, READ-CHAR, READ-BYTE, READ-SEQUENCE, ...
Verwenden Sie oben. Siehe auch: SCHREIBEN und verwandt.
Siehe oben. VERZEICHNIS, Pfadnamen, ...
Verwenden Sie zum Beispiel die CLSQL-Bibliothek.
Lesen Sie das Handbuch Ihres Lisp oder verwenden Sie eine der tragbaren Bibliotheken. Siehe Quicklisp.
Lesen Sie das Handbuch Ihres Lisp oder verwenden Sie eine der tragbaren Bibliotheken. Siehe Quicklisp.
Hängt davon ab. Siehe Quicklisp oder eine implementierungsspezifische Bibliothek.
Siehe Hyperspec für Datei- und Stream-Vorgänge. WRITE-BYTE, READ-BYTE. Öffnen Sie einen Stream als binären Stream.
Verwenden Sie dazu eines der vorhandenen Tools. Studieren Sie vorhandene Parser. Es gibt viele Parser, die in Lisp geschrieben sind, aber nicht viel in Büchern darüber (außer Parser in natürlicher Sprache, die in der KI-Literatur beschrieben sind).
Hängt davon ab. Siehe Quicklisp oder eine implementierungsspezifische Bibliothek.
Hängt davon ab. Siehe Quicklisp oder eine implementierungsspezifische Bibliothek. -> FFI
Abschließender Rat: Lesen Sie den Code anderer Autoren.
Studieren Sie anderen Lisp-Code. Es gibt genug sehr unterschiedlichen Lisp-Code da draußen. Vom Webserver zur Musikkompositionssoftware.
quelle
Schauen Sie sich Cliki an, das Common Lisp-Wiki , das eine Liste der für Common Lisp verfügbaren Bibliotheken enthält, mit denen Sie alle Ihre Aufgaben erledigen können.
Außerdem sollten Sie sich das Common Lisp Cookbook ansehen (es gibt auch eine aktuellere Version ). Es enthält eine Reihe von Code für allgemeine Aufgaben wie das zeilenweise Lesen einer Datei und Fremdfunktionsschnittstellen für die Interaktion mit in C geschriebenen Bibliotheken .
Sie können Erweiterungen für Lisp in C schreiben, je nachdem, welche Implementierung Sie verwenden. Mit Emacs-Lisp können Sie dies beispielsweise tun, obwohl es sich nicht um Common Lisp handelt. Normalerweise möchten Sie den Code in Common Lisp schreiben und ihn dann mithilfe verschiedener Lisp-Compiler-Deklarationen oder der anderen Methode, bei der Sie eine Fremdfunktionsschnittstelle verwenden, so weit wie möglich optimieren.
Das Threading hängt davon ab, welche Implementierung Sie verwenden, aber ich denke, die meisten von ihnen haben jetzt Threads.
Hunchentoot ist einer der besten Lisp-Webserver und der Einstieg ist recht einfach. Sie müssen selbst keinen Threading-Code schreiben, sondern nur die Funktionen des HTTP-Anforderungshandlers schreiben.
Jemand hat eine Liste der GUI-Optionen für Lisp zusammengestellt :
quelle