Frage

Dies ist die Situation: Ich meistens C # Programm und haben geschrieben Typen in es ich will nicht zu verlieren. Zugleich würde Ich mag die funktionale Programmierung lernen. Die offensichtliche Antwort ist natürlich F #.

Aber für alles außer C # Ich benutze Emacs als Editor, und ich würde wirklich Lisp auch zu lernen. (Lernen Sie Ihre Redakteure / IDE Sprache, die Sie wissen, das ist, warum ich ein bisschen VB kenne meine VS-Makros in sie zu schreiben) Und es ist nicht nur Emacs Lisp ist etwas, was ich möchte wirklich lernen.

Wie bei F #, konnte ich es mit C # ohne Interop Problem mischen, haben eine große GUI (WPF) und viele andere .NET-Leckereien. Aber es ist natürlich nicht so ausgereift wie Lisp.

Wenn ich realistisch bin ich, ob ich eine funktionale Sprache in meinem Berufsleben schmuggeln wollen es Fis sein muss. Da das Lernen zwei ganze Sprachen ein bisschen viel scheint, ich habe gehofft, dass Lisp eine gute Möglichkeit wäre, die funktionale Programmierung zu lernen, und wenn ich später F # beginnen, wäre es sehr einfach ....

Ist das wahr? Oder sind die beiden Sprachen überhaupt nicht vergleichbar?

War es hilfreich?

Lösung

Lisp ist eine große Familie von Sprachen und Implementierungen. Schema zum Beispiel ein Lisp-Dialekt ist mit wahrscheinlich mehr als hundert Implementierungen (etwa zehn von ihnen leicht beliebt). Common Lisp ist ein weiterer Dialekt mit etwa zehn aktuell gehalten Implementierungen. Scheme und Common Lisp haben beide Standards geschrieben, die Implementierungen versuchen zu implementieren.

F # ist sowohl eine Sprache und Umsetzung. Von Microsoft. Es wurde hauptsächlich abgeleitet von Ocaml und gehört zur Familie der ML Sprachen.

Lisp war eine sehr frühe Sprach Unterstützung der funktionalen Programmierung (Lisp 1.5 in den 60er Jahren). Viele der frühen Experimente mit der funktionalen Programmierung in Lisp getan. In den 70er Jahren in der Lisp Gemeinde gab es eine Bewegung zu den Wurzeln der funktionalen Programmierung und das Ergebnis war Schema . Dann vor allem in den 80er und 90er Jahren des letzten Jahrhunderts neue funktionale Sprachen erschienen (ML, Miranda, FP, SML, Haskell, Sauber, ...), die waren / sind ganz verschieden von den üblichen Lisp Dialekte. Es gibt noch einige Erbe, vor allem aber entwickelte sie sich in verschiedenen Richtungen (statische Typisierung, Typinferenz, Modulsysteme, Batch-Sprachen, algebraische Datentypen, lazy evaluation, Reinheit und mehr). Die Schema-Gemeinschaft hat immer noch viele Kontakte zu der FP-Community. Aber das ist meistens ist es.

Es gibt einige grundlegende FP Ideen, die unabhängig von einer bestimmten FP Sprache erlernt werden kann, aber in der Regel F # ist sehr verschieden von den meisten Lisp Dialekte. Das andere Merkmal, dass F #, um die .net-Ökosystem unterstützt (vor allem, da es sich um eine Microsoft Schöpfung ist) nicht so gut von Lisp Dialekte unterstützt.

Ich würde auch nicht viel Nutzen erwarten von einer eingeschränkten Lisp-Dialekt wie Emacs Lisp zu wissen, für F # lernen.

Andere Tipps

Ich denke, es ist nur eine kleine ‚Überlappung‘ für was hast du über Common Lisp gegen F # lernen würde. Die Gemeinsamkeit ist, ich denke etwa

  • Programmieren mit ‚Wider-Listen‘ als gemeinsame Art Fundamentaldaten, manchmal das Schreiben rekursive (insbesondere tail-rekursive) Funktionen anstatt Schleifen
  • Einige grundlegende Verwendung von gemeinsamen Funktionen höherer Ordnung (zum Beispiel ‚Karte‘ '- Widget für eine Funktion zu jedem Wert in einer Liste)

Neben einigen dieser Kern funktionalen Programmierung Sachen, ich denke, Common Lisp und F # ist etwa so weit voneinander entfernt wie zwei Mainstream ‚funktional‘ (Nicht-Haskell) Sprachen sein kann. Common Lisp ist dynamisch; F # ist statisch typisiert. Die syntaktischen Formen sind völlig verschieden. Die Laufzeiten sind völlig verschieden. Die Bibliotheken sind sehr unterschiedlich. Die Objektsysteme sind völlig verschieden.

Unabhängig davon, in welcher Reihenfolge man sie lernen, denke ich nach einer dort dem Lernen noch mehr ziemlich viel sein wird in den anderen (Modulo die geringe Überlappung ich oben beschrieben) zu lernen.

F # ist am ehesten vergleichbar mit der ML-Familie von Sprachen, wie SML und CAML. Die Syntax und Funktionen unterscheiden sich von Lisp.

Aber ich denke, das mindestens eine funktionelle Sprache zu lernen ist wirklich wichtig, von einer Informatik-Perspektive. Die Möglichkeit, auf diese Weise zu denken, ist gut.

Und ich würde sagen, eine rein funktionale Sprache vor Beginn der F # Lernen wäre ein Weg, um gute funktionale Programmierung Gewohnheiten zu holen, denn wenn Sie dies nicht tun, könnte Ihr F # Code am Ende mehr OO und weniger funktional zu sein, denn das ist, wo du herkommst.

Aus meiner Sicht gibt es zwei Ansätze für das Lernen der funktionalen Programmierung:

  1. Verwenden Sie eine rein funktionale Sprache wie Lisp oder Haskell, die zwingen Sie aus einer prozeduralen zu brechen mindset sofort; oder

  2. Verwenden Sie eine pragmatische funktionale Sprache wie F #, die auch mehr Angebote vertraut, aber weniger funktional, konstruiert man in sie erleichtern Ihnen den Weg zu helfen.

In jedem Fall werden Sie mehr aus der Lernerfahrung, wenn man etwas Nützliches mit der Sprache tun. Es klingt wie Sie Motivation für Lisp (Emacs) und F # (.NET-Interop), also würde ich einen Blick auf beide sein und sehen, was Ihre Aufmerksamkeit auf sich zieht.

Schließlich gibt es mehr Wert für das Verständnis der funktionalen Programmierung Konzepte (Funktionen höherer Ordnung, keine Nebenwirkungen, Endrekursion usw.) als jeder Sprache. Und wenn man diese Konzepte lernt, wird es viel einfacher sein, neue Sprachen zu erlernen und die Techniken in anderen Sprachen gelten (wie die zunehmend funktionelle C #). In diese Richtung könnte Sie interessieren könnten Functional Programming für die wirkliche Welt .

Zwei wichtige Dinge zu beachten ist:

  • LISP ist dynamisch typisiert, während F # statisch typisiert wird.
  • LISP hat Makros eingebaut. F # nicht.

Obwohl sie sowohl funktional betrachtet und viele gemeinsame Merkmale aufweisen, sind sie auch anders. LISP Lernen werden Sie sicherlich eine bessere F # Programmierer und umgekehrt, aber immer noch würden Sie die Besonderheiten der beiden lernen müssen in der Lage sein in ihnen praktisch zu sein.

Lage, mit .NET Interop würde ich sicherlich F # wählen, aber im Interesse der Programmierung Schönheit würde ich LISP auch versuchen.

Sie sind beide funktionalen Sprachen, aber syntaktisch sie sind sehr unterschiedlich. Das bedeutet, dass viele der Konzepte ähnlich sein wird, und Sie (als Verfahrensentwickler) die gleiche knifflige zu tun haben, entweder zu verwenden, aber sie sind sehr unterschiedliche Sprachen.

F # ist ein Derivat von ML (das betrachtet wird, mit all seinen Derivate, ein unreines funktionale Sprache zu sein), während Lisp älter ist und gilt als eine „reine“ funktionale Sprache.

Die Reinheit einer funktionalen Sprache ist ein faszinierendes Thema, und ich würde empfehlen, dass Sie

Die Semantik von F # und Schema ist sehr ähnlich mit der erwähnten Ausnahme der starken Typisierung.

Auch Schema ist so klein, nicht, es zu lernen!

Als Programmiersprache Lisp ist etwas ganz Besonderes in seinem eigenen Recht aber es Fis nicht ähnlich ist überhaupt, außer dass sie sowohl Unterstützung der funktionalen Programmierung. Nicht viele Sprachkonstrukte tragen über von Lisp zu F #. Wenn Sie lispeln gehen für sie lernen wollen. Die Idee der funktionalen Programmierung tragen wird über einfach nicht die Syntax. Lisp ist wirklich alt, Ende der 50er Jahre. Viele Sprachen wurden von ihr beeinflusst und es gibt ziemlich viele Dialekte.

Wenn Ihr nur für eine reine funktionale Sprache suchen, bevor F # zu lernen, ich Haskell vorschlagen würde. Haskell war stark von ML beeinflusst und ist ein guter Übergang Sprache # F da F # ein Derivat von ML ist. Sie können an Haskell Code aussehen und ähnliche Muster in F # -Code sehen.

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