Frage

Ich habe wirklich das Gefühl, dass ich lernen sollte Lispeln und es gibt viele gute Ressourcen, die mir dabei helfen.

Die komplizierte Syntax schreckt mich nicht ab, aber wo in der „traditionellen kommerziellen Programmierung“ finde ich Stellen, an denen es sinnvoll wäre, sie anstelle einer prozeduralen Sprache zu verwenden?

Gibt es da draußen eine kommerzielle Killer-App, die in Lisp geschrieben wurde?

War es hilfreich?

Lösung

Eine der Hauptanwendungen für Lisp ist die künstliche Intelligenz.Ein Freund von mir belegte am College einen Graduiertenkurs im Bereich KI und schrieb für sein Hauptprojekt einen „Lichter aus"Löser in Lisp.Mehrere Versionen seines Programms nutzten leicht unterschiedliche KI-Routinen und Tests auf etwa 40 Computern lieferten einige ziemlich gute Ergebnisse (ich wünschte, es wäre irgendwo online, wo ich darauf verlinken könnte, aber ich glaube nicht, dass das der Fall ist).

Vor zwei Semestern habe ich Scheme (eine auf Lisp basierende Sprache) verwendet, um ein interaktives Programm zu schreiben, das Abbotts und Costellos „Wer ist zuerst“-Routine simuliert.Die Eingaben des Benutzers wurden mit einigen ziemlich komplizierten Datenstrukturen abgeglichen (ähnlich Karten in anderen Sprachen, aber viel flexibler), um eine angemessene Antwort auszuwählen.Ich habe auch eine Routine geschrieben, um ein 3x3 zu lösen Schiebepuzzle (ein Algorithmus, der leicht auf größere Schieberätsel erweitert werden könnte).

Zusammenfassend lässt sich sagen, dass das Erlernen von Lisp (oder Scheme) möglicherweise nicht viele praktische Anwendungen über die KI hinaus bringt, aber es ist eine äußerst wertvolle Lernerfahrung, wie viele andere festgestellt haben.Das Programmieren in einer funktionalen Sprache wie Lisp hilft Ihnen auch dabei, rekursiv zu denken (wenn Sie Probleme mit der Rekursion in anderen Sprachen hatten, könnte dies eine große Hilfe sein).

Andere Tipps

Lisp ist eine große und komplexe Sprache mit einer großen und komplexen Laufzeit zu ihrer Unterstützung.Aus diesem Grund eignet sich Lisp am besten für große und komplizierte Probleme.

Nun, a Komplex Problem ist nicht dasselbe wie ein kompliziert eins.A Komplex Das Problem ist eines mit vielen kleinen Details, das aber nicht schwer ist.Das Schreiben eines Flugbuchungssystems ist eine komplexe Angelegenheit, aber mit genügend Geld und Programmierern ist es nicht schwer.Verstehst du den Unterschied?

Ein kompliziertes Problem ist eines, das verwickelt ist und bei dem das traditionelle Teilen und Herrschen nicht funktioniert.Einen Roboter steuern oder mit Daten arbeiten, die nicht tabellarisch sind (z. B. Sprachen), oder hochdynamische Situationen.

Lisp eignet sich wirklich 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, Laut Norvig ist Lisp ideal für explorative Programmierung.Das heißt, eine Lösung für ein Problem zu programmieren, das nicht vollständig verstanden wird (im Gegensatz zu einem Online-Buchungssystem).Mit anderen Worten:Komplizierte Probleme.

Darüber hinaus wird Sie das Erlernen von Lisp 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 unbrauchbar.Von Neumann hingegen entwarf ein Modell dafür, wie Computer und Berechnungen funktionieren sollten:Das Von-Neumann-Modell.Der Kern des Von-Neumann-Modells besteht darin, 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 konkretisieren Ihr Programm ein für alle Mal.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, vorgegebene Grenze zwischen Code und Daten.Das Programmieren in Lisp eröffnet Ihnen die Möglichkeit, die Leistungsfähigkeit des Von-Neumann-Modells kennenzulernen.Durch die Programmierung in Lisp sehen Sie alte Konzepte in einem neuen Licht.

Schließlich lernen Sie durch die Interaktion, mit Ihren Programmen zu interagieren, während Sie sie entwickeln (im Gegensatz zum Kompilieren und Ausführen).Dies verändert auch die Art und Weise, wie Sie programmieren, und die Art und Weise, wie Sie die Programmierung betrachten.

Mit diesem Intro kann ich endlich eine Antwort auf Ihre Frage geben:Finden Sie Orte, an denen es die „traditionellen“ Sprachen in den Schatten stellt?

Wenn Sie ein fortgeschrittener Programmierer sind, benötigen Sie fortschrittliche Tools.Und es gibt kein fortschrittlicheres Tool als Lisp.Oder anders gesagt:Die Antwort lautet „Ja“, wenn Ihre Probleme schwerwiegend sind.Nein sonst.

Als Antwort auf @lassevk:

alt text

komplizierte Syntax??

Die Syntax für Lisp lautet unglaublich einfach.

Killer-App in Lisp geschrieben: Emacs.Mit Lisp können Sie Emacs nach Belieben erweitern, um fast alles zu tun, was ein Editor tun könnte.

Aber, sollten Sie Lispeln nur lernen, wenn Sie wollen Sie werden es vielleicht nie bei der Arbeit verwenden, aber es ist trotzdem großartig.

Außerdem möchte ich hinzufügen:Selbst wenn Sie Orte finden, an denen Lisp sinnvoll ist, werden Sie wahrscheinlich niemanden davon überzeugen, dass es über Java, C++, C#, Python, Ruby usw. verwendet werden sollte.

Ich kann nicht aus eigener Erfahrung antworten, aber Sie sollten lesen, was Paul Graham schrieb auf Lisp.Was den Teil „Killer-App“ betrifft, lesen Sie Den Durchschnitt übertreffen.

Ich habe ungefähr ein Jahr lang beruflich in Lisp programmiert, und es lohnt sich auf jeden Fall, es zu lernen.Sie haben die beispiellose Möglichkeit, Redundanzen aus Ihrem Code zu entfernen, indem Sie den gesamten Boilerplate-Code, wo möglich, durch Funktionen und, wo nicht, durch Makros ersetzen können.Darüber hinaus können Sie zur Laufzeit auf eine beispiellose Flexibilität zugreifen und frei zwischen Code und Daten übersetzen.Daher glänzt Lisp in Situationen, in denen Benutzeraktionen die Notwendigkeit auslösen können, komplexe Strukturen dynamisch aufzubauen.Die Flugplaner beliebter Fluggesellschaften sind in Lisp geschrieben, und es gibt auch viele CAD/CAM-Programme in Lisp.

Lisp ist sehr nützlich zum Erstellen kleiner DSLs.Ich habe eine Kopie von Lisp in a Box auf der Arbeit und habe kleine DSLs geschrieben, um SQL Server-Datenbanken abzufragen und Datenschichten usw. in C# zu generieren.Mein gesamter Boiler-Plate-Code ist jetzt in Lisp-Makros geschrieben, die in C# ausgegeben werden.Ich generiere damit HTML, XML, alles Mögliche.Ich wünschte, ich könnte Lisp für die alltägliche Codierung verwenden, aber Lisp kann praktische Vorteile bringen.

Wenn Sie gerne programmieren, sollten Sie Lisp aus reiner Freude lernen. XKCD bringt perfekt die intellektuelle Erleuchtung zum Ausdruck, die sich daraus ergibt.Lisp zu lernen ist für den Programmierer das, was Meditation für den buddhistischen Mönch ist (und das meinte ich ohne jede blasphemische Konnotation).

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 lügt;die r sollten mit den fns im rekursiven Quicksort-Argument übereinstimmen):

(defun quicksort (lis) 
  (if (null lis) 
      nil
      (let* ((x (car lis)) 
             (r (cdr lis)) 
             (fn (lambda (a) 
                   (< a x))))
         (append (quicksort (remove-if-not fn 
                                           r)) 
                 (list x)
                 (quicksort (remove-if fn 
                                       r))))))

Ich habe festgestellt, 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 Hauptsprache, Java, zu lösen.Ich denke, im Allgemeinen erweitert es Ihren Programmierhorizont.

Ich habe in den Achtzigern an der Uni einen „Lispel-Kurs“ besucht.Obwohl ich alle in der Klasse vorgestellten Konzepte durchgearbeitet habe, blieb ich ohne beliebig Wertschätzung für das, was Lisp großartig macht.Ich befürchte, dass viele Leute Lisp einfach als eine weitere Programmiersprache betrachten, was dieser Kurs an der Uni 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 Großartigkeit von Lisp nicht begreifen.Ich war sehr lange einer dieser Menschen.

Erst zwei Jahrzehnte später, als ich mein Interesse an Lisp neu entfachte, begann ich zu verstehen, was Lisp interessant macht – zumindest für mich.Wenn Sie es schaffen, Lispeln zu lernen, ohne von Abschlüssen und Lisp-Makros umgehauen zu werden, haben Sie wahrscheinlich den Punkt verfehlt.

Das Erlernen von LISP/Scheme verschafft Ihnen vielleicht keinen größeren Anwendungsraum, aber es wird Ihnen helfen, ein besseres Gefühl für die funktionale Programmierung, ihre Regeln und Ausnahmen zu bekommen.

Es lohnt sich, die Zeit zu investieren, um den Unterschied zwischen der Schönheit von sechs verschachtelten reinen Funktionen und dem Albtraum von sechs verschachtelten Funktionen mit Nebenwirkungen kennenzulernen.

Aus http://www.gigamonkeys.com/book/introduction-why-lisp.html

Einer der am häufigsten wiederholten Mythen über Lisp ist, dass es "tot" ist. Während es wahr ist, dass Common Lisp nicht so weit verbreitet ist wie beispielsweise Visual Basic oder Java, scheint es seltsam, eine Sprache zu beschreiben, die weiterhin für die neue Entwicklung verwendet wird und die neue Benutzer weiterhin als "tot" anzieht. Einige jüngste LISP -Erfolgsgeschichten sind Paul Grahams ViaWeb, der zu einem Yahoo -Laden wurde, als Yahoo seine Firma kaufte.Das Flug- und Einkaufssystem von ITA Software, QPX, der vom Online -Ticketverkäufer Orbitz und andere verwendet wird;Das Spiel des Naughty Dogs für die PlayStation 2, Jak und Daxter, die größtenteils in einem domänenspezifischen Lisp-Dialekt geschrieben ist, der Naughty Dog erfunden wurde und dessen Compiler selbst in gemeinsamen Lisps geschrieben ist.und die Roomba, der autonome Roboterstaubsauger, dessen Software in L geschrieben ist, eine nach unten kompatible Untergruppe von gemeinsamem Lisp.Noch noch aussagekräftiger ist das Wachstum der Common-lisp.net-Website, auf der Open-Source Common Lisp-Projekte gehostet werden, und die Anzahl der lokalen LISP-Benutzergruppen, die in den letzten Jahren entstanden sind.

„Lisp ist es wert, erlernt zu werden, weil man eine tiefgreifende Erleuchtungserfahrung machen wird, wenn man es endlich versteht;Diese Erfahrung wird Sie für den Rest Ihres Lebens zu einem besseren Programmierer machen, auch wenn Sie Lisp selbst nie oft verwenden.“

--Eric S.Raymond, „Wie man ein Hacker wird“

http://www.paulgraham.com/avg.html

Ich stimme zu, dass Lisp eine dieser Sprachen ist, die Sie niemals in einem kommerziellen Umfeld verwenden dürfen.Aber selbst wenn Sie es nicht schaffen, wird das Erlernen Ihr Programmierverständnis als Ganzes auf jeden Fall erweitern.Zum Beispiel habe ich Prolog im College gelernt und obwohl ich es danach nie mehr verwendet habe, habe ich dadurch ein besseres Verständnis für viele Programmierkonzepte und (manchmal) eine größere Wertschätzung für die Sprachen erlangt, die ich verwende.

Aber wenn Sie es lernen wollen, lesen Sie es auf jeden Fall Auf Lisp

Okay, ich bin vielleicht komisch, aber ich mag Paul Grahams Aufsätze wirklich nicht so sehr und „Über Lisp“ ist ein wirklich schwieriges Buch, wenn man nicht schon ein wenig Ahnung von Common Lisp hat.Stattdessen würde ich Siebel's empfehlen Praktisches gemeinsames Lisp.Was „Killer-Apps“ betrifft, scheint Common Lisp in Nischenshops seinen Platz zu finden ITA, also gibt es zwar keine App, die für CL gleichbedeutend ist, wie es Rails für Ruby gibt, aber es gibt Stellen in der Industrie, die es verwenden, wenn man ein wenig recherchiert.

Wenn Sie sich fragen müssen, ob Sie Lispeln lernen sollten, müssen Sie das wahrscheinlich nicht tun.

Das Erlernen von Lisp wird Javascript in ein völlig anderes Licht rücken!Lisp zwingt Sie wirklich dazu, sowohl die Rekursion als auch das gesamte Paradigma „Funktionen als Objekte erster Klasse“ zu verstehen.Siehe Crockfords ausgezeichneten Artikel über Schema vs. Javascript.Javascript ist heute vielleicht die wichtigste Sprache, daher ist es äußerst nützlich, sie besser zu verstehen!

Gimps Script-Fu ist lippenhaft.Das ist eine Photoshop-Killer-App.

Komplizierte Syntax?Das Schöne an Lisp ist, dass es eine lächerlich einfache Syntax hat.Es handelt sich lediglich um eine Liste, wobei jedes Element der Liste entweder eine andere Liste oder ein elementarer Datentyp sein kann.

Es lohnt sich, es zu lernen, da es Ihre Programmierfähigkeiten verbessert, indem Sie Funktionen als einen weiteren Datentyp betrachten und verwenden.Dies verbessert die Art und Weise, wie Sie in einer imperativen und/oder objektorientierten Sprache programmieren, da Sie dadurch geistig flexibler bei der Strukturierung Ihres Codes sein können.

Um die anderen Antworten zu ergänzen:

Weil das SICP Kurs (die Videos sind verfügbar Hier) ist großartig:bringt dir Lisp bei und vieles mehr!

Killer App? Franz Inc. hat eine lange Liste von Erfolgsgeschichten, aber diese Liste enthält nur Benutzer von AllegroCL...Es gibt wahrscheinlich noch 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 empfehlen Praktisches gemeinsames Lisp.Es hat einen praktischen Ansatz, der es zumindest für mich einfacher machte als andere Bücher, die ich mir angesehen habe.

Du könntest benutzen Clojure heute, um Tests und Skripte auf der Java VM zu schreiben.Obwohl andere Lisp-Sprachen auf der JVM implementiert sind, denke ich, dass Clojure die beste Integration mit Java schafft.

Es gibt Zeiten, in denen die Java-Sprache selbst beim Schreiben von Tests für Java-Code (einschließlich „traditioneller kommerzieller Programmierung“) im Weg steht.(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.Wenn jemand darüber diskutieren möchte, können Sie gerne ein neues Thema eröffnen.) Clojure beseitigt viele dieser Hindernisse.

Lisp kann überall dort eingesetzt werden, wo Sie herkömmliche Programmierung verwenden.Es ist nicht so anders, es ist nur leistungsfähiger.Eine Web-App schreiben?Können Sie es mit Lisp machen und eine Desktop-Anwendung schreiben?Sie können es auf Lisp machen, was auch immer, Sie können es wahrscheinlich auf Lisp oder Python oder einer anderen generischen Programmierung machen (es gibt ein paar 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.Daran müssen Sie mit ihnen arbeiten.Eine pragmatische Lösung wählen wie Clojure das die aktuelle Installationsbasis der Java-Infrastruktur nutzen kann, von der JVM bis zu den Bibliotheken, könnte Ihnen helfen.Wenn Sie über ein Java-Programm verfügen, können Sie außerdem eine Plug-in-Architektur erstellen und Clojure-Plug-ins dafür schreiben und am Ende die Hälfte Ihres Codes in Clojure schreiben.

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 nicht ausreicht.

Viele AutoCAD-Funktionen sind eigentlich LISP-Routinen.

Das ist ein Thema, über das ich selbst eine Weile nachgedacht habe, aber ich bin noch nicht zu einer wirklichen Entscheidung gekommen, da wie immer die Zeit das Hauptproblem ist ...;)

Und da ich diese Links bisher in diesem Beitrag nicht finden kann, füge ich sie aus öffentlichem Interesse hinzu:

Erfolgs- und Misserfolgsgeschichte:Lispeln bei JPL

Wirklich beeindruckende Erfolgsgeschichte:Lisp im Einsatz bei der Orbitz Corporation

Vergleich und Analyse, ob Lisp anstelle von Java verwendet werden sollte:Lisp als Alternative zu Java

Die Syntax ist irrelevant, die Lesbarkeit nicht!

Ich sage nicht, dass dies eine Killer-App ist, aber es sieht so aus, als ob sie cool sein könntehttp://code.google.com/p/plop/

Killer App?Die Flugsuchmaschine von ITA Software ist eine davon.

Was das „Warum“ angeht, wird es Sie höchstwahrscheinlich zu einem besseren Entwickler machen und es ist äußerst unwahrscheinlich, dass Sie zu einem schlechteren Entwickler werden.Es könnte jedoch dazu führen, dass Sie Lisp-Dialekte anderen Sprachen vorziehen.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top