Ich habe wirklich das Gefühl, dass ich Lisp lernen sollte und es gibt viele gute Ressourcen, die mir dabei helfen.
Ich bin nicht von der komplizierten Syntax abgeschreckt, aber wo ich in der "traditionellen kommerziellen Programmierung" Orte finden würde, wäre es sinnvoll, sie anstelle einer prozeduralen Sprache zu verwenden.
Gibt es da draußen eine kommerzielle Killer-App, die in Lisp geschrieben wurde?
functional-programming
lisp
David
quelle
quelle
Antworten:
Eine der Hauptanwendungen für Lisp ist die künstliche Intelligenz. Ein Freund von mir am College nahm an einem AI-Abschlusskurs teil und schrieb für sein Hauptprojekt einen " Lights Out " -Löser in Lisp. Mehrere Versionen seines Programms verwendeten leicht unterschiedliche KI-Routinen und Tests auf ungefähr 40 Computern lieferten einige ziemlich gute Ergebnisse (ich wünschte, es wäre irgendwo online, auf das ich verlinken könnte, aber ich glaube nicht, dass es so ist).
Vor zwei Semestern habe ich Scheme (eine auf Lisp basierende Sprache) verwendet, um ein interaktives Programm zu schreiben, das Abbotts und Costellos "Who's on First" -Routine simuliert. Die Eingaben des Benutzers wurden mit einigen ziemlich komplizierten Datenstrukturen verglichen (die Karten in anderen Sprachen ähneln, aber viel flexibler sind), um zu entscheiden, welche Antwort angemessen wäre. Ich habe auch eine Routine geschrieben, um ein 3x3- Dia-Puzzle zu lösen (ein Algorithmus, der leicht auf größere Dia-Puzzles erweitert werden kann).
Zusammenfassend lässt sich sagen, dass das Lernen von Lisp (oder Schema) möglicherweise nicht viele praktische Anwendungen jenseits der KI bietet, aber es ist eine äußerst wertvolle Lernerfahrung, wie viele andere angegeben haben. Das Programmieren in einer funktionalen Sprache wie Lisp hilft Ihnen auch beim rekursiven Denken (wenn Sie Probleme mit der Rekursion in anderen Sprachen haben, kann dies eine große Hilfe sein).
quelle
Lisp ist eine große und komplexe Sprache mit einer großen und komplexen Laufzeit, um sie zu unterstützen. Aus diesem Grund eignet sich Lisp am besten für große und komplizierte Probleme.
Ein komplexes Problem ist nicht dasselbe wie ein kompliziertes . Ein komplexes Problem ist eines mit vielen kleinen Details, das aber nicht schwer ist. Das Schreiben eines Airline-Buchungssystems ist ein komplexes Geschäft, aber mit genügend Geld und Programmierern ist es nicht schwer. Den Unterschied bekommen?
Ein kompliziertes Problem ist ein kompliziertes, bei dem traditionelles Teilen und Erobern nicht funktioniert. Steuern eines Roboters oder Arbeiten mit Daten, die nicht tabellarisch sind (z. B. Sprachen) oder in hochdynamischen Situationen.
Lisp eignet sich sehr gut für Probleme, bei denen die Lösung erweiterbar sein muss. Das klassische Beispiel ist der Emacs-Texteditor. Es ist vollständig programmierbar und somit eine eigenständige Programmierumgebung.
In seinem berühmten Buch PAIP sagt Norvig, dass Lisp ideal für explorative Programmierung ist. Das heißt, Sie programmieren eine Lösung für ein Problem, das nicht vollständig verstanden wurde (im Gegensatz zu einem Online-Buchungssystem). Mit anderen Worten: Komplizierte Probleme.
Darüber hinaus wird das Erlernen von Lisp Sie an etwas Grundlegendes erinnern, das vergessen wurde: Der Unterschied zwischen Von Neumann und Turing. Wie wir wissen, ist Turings Rechenmodell ein interessantes theoretisches Modell, aber als Modell für den Entwurf von Computern nutzlos. Von Neumann hingegen entwarf ein Modell für die Ausführung von Computern und Berechnungen: Das Von Neumann-Modell. Im Mittelpunkt des Von Neumann-Modells steht, dass Sie nur einen Speicher haben und dort sowohl Ihren Code als auch Ihre Daten speichern. Beachten Sie sorgfältig, dass ein Java-Programm (oder C # oder was auch immer Sie möchten) eine Manifestation des Turing-Modells ist. Sie setzen Ihr Programm ein für alle Mal konkret. Dann hoffen Sie, dass Sie mit allen Daten umgehen können, die darauf geworfen werden.
Lisp behält das Von Neuman-Modell bei; Es gibt keine scharfe, vorher festgelegte Grenze zwischen Code und Daten. Das Programmieren in Lisp öffnet Ihren Geist für die Kraft des Von Neumann-Modells. Wenn Sie in Lisp programmieren, sehen Sie alte Konzepte in einem neuen Licht.
Wenn Sie interaktiv sind, lernen Sie schließlich, mit Ihren Programmen zu interagieren, während Sie sie entwickeln (im Gegensatz zum Kompilieren und Ausführen). Dies ändert auch die Art und Weise, wie Sie programmieren und wie Sie die Programmierung anzeigen.
Mit diesem Intro kann ich endlich eine Antwort auf Ihre Frage geben: Finden Sie Orte, an denen es "traditionelle" Sprachen überstrahlt?
Wenn Sie ein fortgeschrittener Programmierer sind, benötigen Sie fortgeschrittene Werkzeuge. Und es gibt kein fortgeschritteneres Werkzeug als Lisp. Oder mit anderen Worten: Die Antwort lautet Ja, wenn Ihre Probleme schwierig sind. Nein anders.
quelle
Als Antwort auf @lassevk :
quelle
komplizierte Syntax ?
Die Syntax für lisp ist unglaublich einfach .
Killer App geschrieben in Lisp: Emacs . Mit Lisp können Sie Emacs nach Belieben erweitern, um fast alles zu tun, was Sie sich von einem Editor vorstellen können.
Aber du solltest Lisp nur lernen, wenn du willst , und du wirst es vielleicht nie bei der Arbeit verwenden können, aber es ist immer noch großartig.
Außerdem möchte ich hinzufügen: Selbst wenn Sie Orte finden, an denen Lisp Sinn macht, werden Sie wahrscheinlich niemanden davon überzeugen, dass es über Java, C ++, C #, Python, Ruby usw. verwendet werden sollte.
quelle
Ich kann nicht aus erster Hand beantworten , aber Sie sollten lesen , was Paul Graham schrieb auf Lisp . Was den Teil "Killer-App" betrifft, lesen Sie Beating the Average .
quelle
Ich habe ungefähr ein Jahr lang professionell in Lisp programmiert und es lohnt sich auf jeden Fall zu lernen. Sie haben eine beispiellose Möglichkeit, Redundanz aus Ihrem Code zu entfernen, indem Sie den gesamten Code auf der Kesselplatte nach Möglichkeit durch Funktionen und Makros nach Möglichkeit ersetzen können. Sie können auch zur Laufzeit auf beispiellose Flexibilität zugreifen und frei zwischen Code und Daten übersetzen. In Situationen, in denen Benutzeraktionen die Notwendigkeit auslösen können, komplexe Strukturen dynamisch aufzubauen, strahlt Lisp wirklich. Beliebte Flugplaner von Fluggesellschaften sind in Lisp geschrieben, und es gibt auch viele CAD / CAM in Lisp.
quelle
Wenn Sie gerne programmieren, sollten Sie Lisp aus purer Freude lernen. XKCD drückt die daraus resultierende intellektuelle Erleuchtung perfekt aus. Lisp zu lernen ist für den Programmierer, was Meditation für den buddhistischen Mönch ist (und ich meinte dies ohne blasphemische Konnotation).
quelle
Lisp ist sehr nützlich, um kleine DSLs zu erstellen. Ich habe eine Kopie von Lisp in a Box, die bei der Arbeit ausgeführt wird, und ich habe kleine DSLs geschrieben, um SQL Server-Datenbanken abzufragen und Datenebenen usw. in C # zu generieren. Mein gesamter Code für die Kesselplatte ist jetzt in Lisp-Makros geschrieben, die an C # ausgegeben werden. Ich generiere damit HTML, XML und alles Mögliche. Ich wünschte, ich könnte Lisp für die tägliche Codierung verwenden, aber Lisp kann praktische Vorteile bringen.
quelle
Jede Sprache sieht viel schwieriger aus, wenn man nicht die üblichen Einrückungskonventionen einer Sprache verwendet. Wenn man ihnen von Lisp folgt, sieht man ziemlich leicht, wie es eine Syntaxbaumstruktur ausdrückt (beachten Sie, dass dies nicht ganz richtig ist, da die Vorschau ein wenig liegt; die Rs sollten mit den fns im rekursiven Quicksort-Argument übereinstimmen):
quelle
let
und eindefun
am Anfang der Funktion verwenden, um zu definieren,fn
da es sich nicht ändert.Ich fand heraus, dass das Erlernen einer neuen Sprache immer Ihren Programmierstil in Sprachen beeinflusst, die Sie bereits kennen. Für mich hat es mich immer dazu gebracht, auf unterschiedliche Weise zu denken, um ein Problem in meiner Primärsprache, Java, zu lösen. Ich denke im Allgemeinen, es erweitert nur Ihren Horizont in Bezug auf die Programmierung.
quelle
Wenn Sie sich fragen müssen, ob Sie Lispeln lernen sollen, müssen Sie das wahrscheinlich nicht.
quelle
Ich habe in den achtziger Jahren eine "Lisp-Klasse" am College besucht. Trotz aller Konzepte, die in der Klasse vorgestellt wurden, blieb mir nichts übrig Wertschätzung für das, was Lisp großartig macht. Ich befürchte, dass viele Leute Lisp als eine andere Programmiersprache betrachten, was dieser College-Kurs vor so vielen Jahren für mich getan hat. Wenn Sie jemanden sehen, der sich über die Lisp-Syntax (oder deren Fehlen) beschwert, besteht eine gute Chance, dass er zu den Menschen gehört, die die Größe von Lisp nicht verstanden haben. Ich war sehr lange einer dieser Leute.
Erst zwei Jahrzehnte später, als ich mein Interesse an Lisp wieder entfachte, begann ich zu "verstehen", was Lisp interessant macht - für mich jedenfalls. Wenn Sie es schaffen, Lisp zu lernen, ohne von Verschlüssen und Lisp-Makros überwältigt zu werden, haben Sie wahrscheinlich den Punkt verfehlt.
quelle
Das Erlernen von LISP / Schema bietet Ihnen möglicherweise keinen größeren Anwendungsbereich, hilft Ihnen jedoch dabei, die funktionale Programmierung, ihre Regeln und Ausnahmen besser zu verstehen.
Es lohnt sich, Zeit zu investieren, um den Unterschied in der Schönheit von sechs verschachtelten reinen Funktionen und dem Albtraum von sechs verschachtelten Funktionen mit Nebenwirkungen zu lernen.
quelle
Von http://www.gigamonkeys.com/book/introduction-why-lisp.html
quelle
"Lisp ist es wert, für die tiefgreifende Erleuchtungserfahrung gelernt zu werden, die Sie haben werden, wenn Sie es endlich bekommen. Diese Erfahrung wird Sie für den Rest Ihrer Tage zu einem besseren Programmierer machen, selbst wenn Sie Lisp selbst nie wirklich oft verwenden."
- Eric S. Raymond, "Wie man ein Hacker wird"
http://www.paulgraham.com/avg.html
quelle
Ich bin damit einverstanden, dass Lisp eine dieser Sprachen ist, die Sie in einem kommerziellen Umfeld möglicherweise nie verwenden. Aber selbst wenn Sie nicht dazu kommen, wird das Lernen Ihr Verständnis der Programmierung als Ganzes definitiv erweitern. Zum Beispiel habe ich Prolog im College gelernt und obwohl ich es nie wieder benutzt habe, habe ich mir ein besseres Verständnis für viele Programmierkonzepte und (manchmal) eine größere Wertschätzung für die Sprachen gegeben, die ich benutze.
Aber wenn Sie es lernen wollen ... lesen Sie auf jeden Fall On Lisp
quelle
Wenn Sie Lisp lernen, wird Javascript in ein völlig anderes Licht gerückt! Lisp zwingt Sie wirklich dazu, sowohl die Rekursion als auch das gesamte Paradigma "Funktionen als erstklassige Objekte" zu erfassen. Siehe Crockfords ausgezeichneten Artikel über Scheme vs Javascript . Javascript ist heute vielleicht die wichtigste Sprache, daher ist es immens nützlich, es besser zu verstehen!
quelle
Gimps Script-Fu ist lippenhaft. Das ist eine Photoshop-Killer-App.
quelle
Okay, ich mag komisch sein, aber ich mag Paul Grahams Essays wirklich nicht so sehr & on Lisp ist ein wirklich raues Buch, wenn Sie Common Lisp noch nicht verstehen. Stattdessen würde ich Siebel's Practical Common Lisp wählen . Was "Killer-Apps" betrifft, scheint Common Lisp seinen Platz in Nischengeschäften wie ITA zu finden. Obwohl es keine App gibt, die für CL so synonym ist wie Rails für Ruby, gibt es in der Industrie Orte, die sie verwenden, wenn Sie dies tun ein wenig graben.
quelle
Komplizierte Syntax? Das Schöne an Lisp ist, dass es eine lächerlich einfache Syntax hat. Es ist nur eine Liste, in der jedes Element der Liste entweder eine andere Liste oder ein elementarer Datentyp sein kann.
Es lohnt sich zu lernen, da es Ihre Codierungsfähigkeit verbessert, Funktionen als nur einen anderen Datentyp zu betrachten und zu verwenden. Dies verbessert die Art und Weise, wie Sie in einer imperativen und / oder objektorientierten Sprache codieren, da Sie dadurch mental flexibler mit der Struktur Ihres Codes umgehen können.
quelle
So ergänzen Sie die anderen Antworten:
Weil der SICP- Kurs (die Videos sind hier verfügbar ) großartig ist: Er bringt dir Lisp und vieles mehr bei !
quelle
Killer App? Franz Inc. hat eine lange Liste von Erfolgsgeschichten , aber diese Liste enthält nur Benutzer von AllegroCL ... Es gibt wahrscheinlich andere. Mein Favorit ist die Geschichte über Naughty Dog , da ich ein großer Fan der Crash Bandicoot-Spiele war.
Zum Erlernen von Common Lisp würde ich Practical Common Lisp empfehlen . Es hat einen praktischen Ansatz, der es zumindest für mich einfacher gemacht hat als andere Bücher, die ich mir angesehen habe.
quelle
Sie können Clojure heute verwenden, um Tests und Skripte auf die Java-VM zu schreiben. Während in der JVM andere Lisp-Sprachen implementiert sind, kann Clojure meiner Meinung nach am besten in Java integrieren.
Es gibt Zeiten, in denen die Java-Sprache selbst das Schreiben von Tests für Java-Code behindert (einschließlich "traditioneller kommerzieller Programmierung"). (Ich meine das nicht als Anklage gegen Java - andere Sprachen leiden unter dem gleichen Problem -, aber es ist eine Tatsache. Da das Thema nicht Java ist, werde ich nicht näher darauf eingehen. Sie können gerne ein neues Thema beginnen, wenn jemand möchte darüber diskutieren.) Clojure beseitigt viele dieser Hindernisse.
quelle
Lisp kann überall dort verwendet werden, wo Sie herkömmliche Programmierung verwenden. Es ist nicht so anders, es ist nur mächtiger. Eine Web-App schreiben? Sie können es auf Lisp tun und eine Desktop-Anwendung schreiben? Sie können es auf Lisp tun, was auch immer, Sie können es wahrscheinlich auf Lisp, Python oder einer anderen generischen Programmierung tun (es gibt einige Sprachen, die nur für eine Aufgabe geeignet sind).
Das größte Hindernis wird wahrscheinlich die Akzeptanz Ihres Chefs, Ihrer Kollegen oder Ihrer Kunden sein. Das ist etwas, mit dem Sie arbeiten müssen. Die Wahl einer pragmatischen Lösung wie Clojure , die die aktuelle Installationsbasis der Java-Infrastruktur von der JVM bis zu den Bibliotheken nutzen kann, könnte Ihnen helfen. Wenn Sie ein Java-Programm haben, können Sie auch eine Plug-In-Architektur erstellen und Clojure-Plug-Ins dafür schreiben und am Ende die Hälfte Ihres Codes in Clojure schreiben.
quelle
Kein Grund, aber (trivial) AutoCAD bietet LISP- und DCL-Laufzeitunterstützung. Es ist eine bequeme Möglichkeit, komplexe Makros (einschließlich ActiveX-Automatisierung) zu schreiben, wenn Sie VBA oder deren C ++ - oder .NET-SDKs nicht verwenden möchten oder wenn ein DIESEL-Ausdruck sie nicht schneidet.
Viele Funktionen von AutoCAD sind LISP-Routinen.
quelle
Dies ist ein Thema, über das ich selbst eine Weile nachgedacht habe, aber ich bin nicht wirklich zu einer Entscheidung gekommen, da die übliche Zeit das Hauptproblem ist ...;)
Und da ich diese Links in diesem Beitrag nicht finden kann, füge ich sie für das öffentliche Interesse hinzu:
Erfolgs- und Misserfolgsgeschichte: Lisping bei JPL
Wirklich beeindruckende Erfolgsgeschichte: Lisp im Einsatz bei der Orbitz Corporation
Vergleich und Analyse, ob Lisp anstelle von Java verwendet werden soll: Lisp als Alternative zu Java
quelle
Syntax ist irrelevant, Lesbarkeit nicht!
quelle
Das heißt nicht, dass dies eine Killer-App ist, aber es sieht so aus, als könnte es cool sein http://code.google.com/p/plop/
quelle
Killer App? Die Flugsuchmaschine von ITA Software ist eine.
Was das "Warum" betrifft, wird es Sie höchstwahrscheinlich zu einem besseren Entwickler machen und es ist äußerst unwahrscheinlich, dass Sie zu einem schlechteren Entwickler werden. Es kann jedoch dazu führen, dass Sie Lisp-Dialekte anderen Sprachen vorziehen.
quelle