Was wäre ein gutes erstes funktionales Programmierprojekt?
Ich möchte mein Bachelor-Projekt mit einem Knall beenden und möchte es mit einem funktionalen Programmierprojekt beenden. Wir haben es nicht in der Schule gelernt, aber wir werden ermutigt, selbst zu versuchen, neue Dinge zu lernen, und ich dachte, ein neues Paradigma zu lernen, nicht nur eine neue Sprache, wäre eine großartige Übung für mich und wahrscheinlich auch für die Lehrer etwas Interessantes .
Das Problem ist, dass ich ein bisschen früher mit meinem Projekt beginnen möchte, um die Sommerferien zu nutzen, die funktionale Programmierung besser zu verstehen und mich mit einer Sprache vertraut zu machen.
Was würden Sie sagen, wäre ein Projekt für bewährte Praktiken, das ein bisschen herausfordernd ist, aber mich auch die Sprache, das Paradigma usw. lernen lässt. Und was würden Sie dann für ein gutes Projekt (ein fortgeschritteneres) für mein Bachelor-Projekt halten?
Vorschläge für die beste Sprache für den Einstieg in die funktionale Programmierung sind ebenfalls willkommen.
Antworten:
Wenn Sie sich für etwas relativ Mathematisches oder Logisches entscheiden, ist es im Allgemeinen einfacher - funktionale Programmiersprachen eignen sich im Allgemeinen gut für Anwendungen, die eine Form der Umwandlung von einer bestimmten Eingabe in eine Ausgabe darstellen.
Einige Ideen, in grober Reihenfolge der Schwierigkeit:
Genetische Algorithmen - Schreiben Sie ein Programm, das Lösungen für eine bestimmte Aufgabe entwickelt, wobei die Lösungen in einer einfachen DSL dargestellt werden. Ich hatte Spaß, bevor ich kleine Bots baute, die in einem 2D-Raster nach Nahrung suchen und verschiedene Strategien entwickeln
Parsing-Kombinatoren - Erstellen Sie eine Parser-Kombinator- Bibliothek, mit der Sie einen Parser für eine beliebige Sprache mit Funktionen höherer Ordnung erstellen können.
Wenn Sie wirklich eine Herausforderung suchen, können Sie versuchen, ein Computerspiel zu schreiben. Beachten Sie, dass dies eine schwierige Aufgabe ist, da Spiele eine große Menge an veränderlichen Zuständen aufweisen, deren Verwaltung in einem funktionalen Programmierstil schwierig sein kann. Erwarten Sie, mehr zu erfahren, als Sie jemals über Monaden usw. wissen wollten.
Ich würde Clojure als eine pragmatische funktionale Sprache empfehlen. Ich benutze es jetzt seit ungefähr 18 Monaten und bin mit der Wahl äußerst zufrieden. Hauptgründe sind:
Sie können die Grundlagen sehr einfach ausprobieren mit:
quelle
Bevor Sie sich mit konkreten Projekten befassen, lernen Sie zunächst die Grundlagen der funktionalen Programmierung kennen, damit Sie eine gute Vorstellung von den Projekttypen haben, die zu Ihnen passen.
Der beste Einstieg ist wahrscheinlich Die Struktur und Interpretation von Computerprogrammen (SICP), die auf dem Scheme-Dialekt von Lisp basiert. Dies ist ein klassischer CS-Text, und der vollständige Text ist online verfügbar (Link bereitgestellt).
Wenn Sie ausgefallen sein und eine modernere funktionale Sprache verwenden möchten, die auf die JVM abzielt, schauen Sie sich Clojure an. Es gibt sogar eine speziell für Clojure angepasste Version von SICP .
Wenn Sie den SICP-Text durchgehen, werden Sie eine Vorstellung davon bekommen, warum die funktionale Programmierung für bestimmte Aufgabentypen so gut geeignet ist, und die Übungen könnten ein vollwertiges Projekt inspirieren. Wenn Sie die Clojure Weg zu gehen wählen, und wollen einige bestehende Projekte zu untersuchen, gibt es einige gute Links hier .
quelle
Quantitative Analyse
Wenn Sie das Finanzwesen für etwas interessant halten, ist es eine gute Ergänzung, ein paar quantitative Dinge mit funktionaler Programmierung zu tun, da diese sehr algorithmisch sind. Ich spreche von Portfoliotheorie und Dingen wie Sharpe und Sortino Ratios usw. Erstelle eine App, die die Renditen eines Fonds analysiert und verschiedene Statistiken, Diagramme usw. liefert.
Ich würde F # nur empfehlen, weil ich denke, dass es eine einfache funktionale Sprache ist, in der man anfangen kann, die über gute Tools und ein gutes Framework verfügt. Andere Alternativen sind Lisp und Clojure, aber sie sind etwas schwieriger zu erlernen.
quelle
Für einen Vorsprung könnten Sie versuchen, ein kleines Blackjack-Spiel in F # zu implementieren. Dies ist ein Hausaufgabenprojekt, das in diesem kurzen Video-Tutorial erstellt wurde . Die Lösung finden Sie auch im Internet (und in einem der Videos).
quelle
Sie könnten einen Interpreter für Schema oder Lisp mit OCaml schreiben.
quelle
An welche funktionale Sprache haben Sie gedacht? Jeder hat unterschiedliche Eigenschaften. Die eine Sprache, die mich am meisten beeindruckte, war Haskell, und ich würde vorschlagen, dass Sie dasselbe tun.
quelle
Sie könnten auch zu einem Open-Source-Projekt beitragen.
Im Programmiersprachenprojekt Frege gibt es zum Beispiel viel zu tun. Sie könnten sich zum Beispiel darum kümmern, Basis-Haskell-Bibliotheken zu portieren. Dies würde Sie zu einem Haskell-Experten machen, während Sie daran arbeiten.
quelle