Als meine erste Programmiersprache habe ich beschlossen, Haskell zu lernen. Ich bin Hauptfach Analytische Philosophie, und Haskell hat mir ermöglicht, schnell und korrekt Programme von Interesse zu erstellen, z. B. Wandler für das Parsen natürlicher Sprachen, Theoremprüfer und Interpreten. Obwohl ich erst seit zweieinhalb Monaten programmiere, fand ich Haskells Semantik und Syntax viel einfacher zu lernen als traditionellere imperative Sprachen und fühlte mich (jetzt) mit den meisten Konstrukten wohl.
Das Programmieren in Haskell ist jedoch wie Zauberei, und ich möchte meine Programmierkenntnisse erweitern. Ich möchte eine neue Programmiersprache zum Lernen auswählen, habe aber nicht genug Zeit, um eine beliebige Sprache zu lernen, sie fallen zu lassen und zu wiederholen. Also dachte ich, ich würde die Frage hier zusammen mit einigen Bestimmungen über die Art der Sprache, die ich suche, stellen. Einige sind subjektiv, andere sollen den Übergang von Haskell erleichtern.
- Starkes Typensystem. Einer meiner Lieblingsteile beim Programmieren in Haskell ist das Schreiben von Typdeklarationen. Dies hilft mir, meine Gedanken über einzelne Funktionen und ihre Beziehung zum gesamten Programm zu strukturieren. Es erleichtert auch das informelle Nachdenken über die Richtigkeit meines Programms. Mir geht es um Korrektheit, nicht um Effizienz.
- Schwerpunkt eher auf Rekursion als auf Iteration. Ich verwende iterative Konstrukte in Haskell, implementiere sie aber rekursiv. Es ist jedoch viel einfacher, die Struktur einer rekursiven Funktion zu verstehen als eine komplizierte iterative Prozedur, insbesondere wenn Kombinatoren und Funktionen höherer Ordnung wie Karten, Falten und Binden verwendet werden.
- Belohnung zu lernen. Haskell ist eine lohnende Sprache, in der man arbeiten kann. Es ist ein bisschen wie Kant zu lesen. Meine Erfahrung vor einigen Jahren mit C war es jedoch nicht. Ich suche nicht nach C. Die Sprache sollte ein konzeptionell interessantes Paradigma durchsetzen, was meiner Meinung nach die C-Likes meiner Meinung nach nicht tun.
Abwägen der Antworten : Dies sind natürlich nur Notizen. Ich möchte nur allen antworten, die wohlgeformte Antworten gegeben haben. Du warst sehr hilfreich.
1) Mehrere Antworten zeigten, dass eine starke, statisch typisierte Sprache, die die Rekursion betont, eine andere funktionale Sprache bedeutet. Während ich weiterhin stark mit Haskell zusammenarbeiten möchte, haben Camccann und Larsmans zu Recht darauf hingewiesen, dass eine andere solche Sprache "den Übergang zu sehr erleichtern" würde. Diese Kommentare waren sehr hilfreich, da ich Haskell nicht in Caml schreiben möchte! Von den Beweisassistenten sehen Coq und Agda beide interessant aus. Insbesondere würde Coq eine solide Einführung in die konstruktive Logik und die formale Typentheorie bieten. Ich habe ein wenig Zeit mit Prädikaten erster Ordnung und modaler Logik verbracht (Mendellsohn, Enderton, einige von Hinman), also würde ich wahrscheinlich viel Spaß mit Coq haben.
2) Andere bevorzugten Lisp (Common Lisp, Scheme und Clojure). Soweit ich weiß , verfügen sowohl Common Lisp als auch Scheme über ein hervorragendes Einführungsmaterial ( On Lisp und The Reasoned Schemer , SICP ). Das Material in SICP veranlasst mich, mich dem Schema zuzuwenden . Das Programm über SICP würde insbesondere eine andere Bewertungsstrategie, die Umsetzung von Faulheit und die Möglichkeit abdecken, sich auf Themen wie Fortsetzungen, Dolmetscher, symbolische Berechnungen usw. zu konzentrieren. Wie andere bereits betont haben, wäre Lisps Behandlung von Code / Daten völlig neu. Daher neige ich stark zu Option (2), einem Lisp.
3) Drittens Prolog. Prolog hat eine Fülle von interessantem Material, und seine primäre Domäne ist genau das, was ich in interessiert bin. Es hat eine einfache Syntax und ist leicht zu lesen. Ich kann im Moment nicht mehr kommentieren, aber nachdem ich einen Überblick über Prolog gelesen und ein Einführungsmaterial überflogen habe, rangiert es mit (2). Und es scheint, als würde Prologs Backtracking immer in Haskell gehackt!
4) Von den gängigen Sprachen sieht Python am interessantesten aus. Tim Yates lässt die Sprachen sehr ansprechend klingen. Anscheinend wird Python häufig CS-Majors im ersten Jahr beigebracht. Es ist entweder konzeptionell reichhaltig oder leicht zu erlernen. Ich müsste mehr recherchieren.
Vielen Dank für Ihre Empfehlungen! Es sieht so aus, als ob ein Lisp (Schema, Clojure), ein Prolog oder ein Proof-Assistent wie Coq oder Agda die wichtigsten Sprachen sind, die empfohlen werden.