10

Ich habe seit ein paar Jahren jetzt codiert, nichts zu kompliziert. C++ ist was ich am besten kann. Ich bin kürzlich in Paul Grahams Website gestolpert, wo ich Horror programmiert habe und jetzt hier bin.Was lerne ich, mich mit den Wegen der funktionalen Programmierung zu "erleuchten"?

Was lerne ich "mich mit den Wegen" der funktionalen Programmierung zu erleuchten? Haskell, Schema oder CLisp?

+0

Sie haben auch Scala, die etwas Schwung zu haben scheint: http://www.scala-lang.org/. Von einem C++ - Hintergrund her kommend, können Sie einige interessante FP-Konstrukte in D finden: In D verwenden Sie (rein) FP, wann immer es Sinn macht. –

+0

Während wir auf VMs sind, ist F # Scalas Gegenstück für .NET. – Kos

Antwort

5

Von den drei würde ich sagen, Scheme ist die einfachste insgesamt, wenn das Ihr Hauptanliegen ist. SICP verwendet Schema, und ist selbst eine großartige Ressource für das Lernen, den funktionalen Weg zu programmieren.

Common Lisp hat jedoch viele erweiterte Funktionen, die es ziemlich aussagekräftig machen, z. B. leistungsstarke Fehlerbehandlung (leistungsstärker als Ausnahmen), multimethods und Unterstützung für aspect oriented programming.

Sie könnten mit einem beginnen, aber am Ende sollten Sie viele Sprachen lernen.

+5

Common Lisp hat wirklich viele coole Features, aber die meisten von ihnen haben nichts mit funktionaler Programmierung zu tun. – Chuck

+0

@Chuck: sehr wahr. Das ist einer der Gründe, warum ich Schema gegenüber Common Lisp empfehle. Ich bin einfach so ein Fan, ich kann nicht anders, als einige zu erwähnen. Vivant NCITS/J13. – outis

+0

Scheme ist großartig, wenn Sie verstehen möchten, wie funktionale Sprachen hinter den Kulissen funktionieren. –

4

Wie andere Antworten sagen, alle drei sind gut.

Aber wenn Sie sich für Lisp entscheiden, dann würde ich vorschlagen, dass Sie gehen für Clojure, die vielleicht seine neueste Reinkarnation ist.

+2

Clojure ist ziemlich nett, wenn Sie OO Lisp wollen, aber es ist eine schlechte Wahl, wenn Sie funktionale Programmierung lernen wollen. Es gibt nicht einmal eine Tail-Call-Eliminierung! – Porculus

+2

@Porculus: Clojure führt keine Tail-Call-Eliminierung durch, da Probleme mit Java integriert werden müssen, aber es ermöglicht rekursive Lösungen mit dem Operator "recur". Soweit ich weiß, scheint es immer noch stärker funktional zu sein als Common Lisp. – Chuck

+1

Clojure ist funktioneller als jedes andere Lisp, das mir bekannt ist - es ist stilistisch viel näher an Haskell. Lazy Sequenzen, unveränderliche Datenstrukturen, streng kontrollierte Mutabilität, OOP entmutigt etc ..... Was TCO betrifft - es macht es für 99% der Fälle mit "recur" und bietet alternative gute Lösungen für die anderen 1%. Ich habe * nie * ein Problem mit TCO in drei Jahren der Verwendung von Clojure gehabt ..... – mikera

18

Wenn Sie sich für funktionale Programmierung interessieren, ist Haskell die einzige rein funktionale Sprache auf dieser Liste. Common Lisp ist eine schwach funktionierende gemischte Paradigma-Sprache, und Schema ist stärker funktional, aber immer noch nicht rein. Lisps sind aus anderen Gründen interessant, aber Haskell ist so ziemlich der Stand der Technik für funktionale Programmierung.

Der Grund, warum ich stärker funktionale Sprachen wie Haskell ermutige, ist, weil ein großer Teil des "Lernens der funktionalen Programmierung" lernt, auf andere Weise an Ihr Programm zu denken. Wenn Ihre Sprache es zu einem natürlichen Gefühl macht, zwingend zu schreiben, ist es zu einfach, in diese Art zu denken zu fallen und niemals zu erkennen, dass es einen anderen Weg gibt, dies zu tun.

+0

Ich glaube nicht, dass es natürlich folgt, dass je reiner eine Sprache ist, desto geeigneter ist es für das Lernen funktionaler Programmierung. Es könnte auch die Barriere, um in die funktionale Denkweise zu kommen, zu groß werden lassen. Ich bin persönlich in die Programmierung mit Ruby, Lua und Python eingestiegen. OCaml, das ich früher gemacht habe, hat mich nicht zum funktionalen Programmieren gebracht, weil es zu fremd war, um mir die Konzepte zu ermöglichen. Ich denke, Scheme wäre ein pragmatischerer Ansatz. –

4

'erleuchten mich mit den Möglichkeiten' der funktionalen Programmierung?

das stärkste Exemplar des funktionalen Stils Haskell, rein funktionale Programmierung (keine Nebenwirkungen), starke statische Typisierung und mit einer pragmatischen Umsetzung mit einem Schwerpunkt auf Multi-Core-Parallelität betont, aber auch eine große Gemeinschaft, die (um 2000 Bibliotheken verfügbar unter http://hackage.haskell.org und viele Online-Ressourcen).

Es ist etwas berühmt für die Umschulung, wie Menschen über Programmierung denken.

Aber das ist Advocacy, und nicht eine nützliche Stackoverflow Frage und Antwort-Sitzung. Sie müssen selbst entscheiden, was Sie lernen möchten.

3

Haben Sie schon von F #, ML oder OCaml gehört? Diese drei Sprachen gehören zur ML-Familie.

F# ist ein neuer ML-Dialekt, der von Microsoft unterstützt wird und mit Visual Studio 2010 ausgeliefert wird.Das Gute an F # (oder anderen ML-Sprachen) ist, dass Sie beim ersten Start imperative Codes schreiben und schrittweise einen guten funktionalen Stil erlernen können.

Hier ist ein Beispiel, das ich für Project Euler #2 schrieb. Als ich es zuerst gemacht habe, habe ich einen imperativen Stil verwendet. Später kann ich Lazy Sequence verwenden, ein leistungsfähiges Programmierungskonzept.