Ich habe jetzt mehrere Monate damit verbracht, F # mit dem größten Lerneffekt zu lernen F # übersetzt den Code OCaml in " Handbuch der praktischen Logik und des automatisierten Denkens " ( WorldCat ) von John Harrison, in F #.
Da dies eine so effektive Methode des Lernens ist, plane ich, den Code in mehr Bücher in F # zu übersetzen, aber Bücher konzentrieren sich hauptsächlich auf funktionale Konzepte oder Anwendungen in der realen Welt , die normalerweise dafür bekannt sind, dass sie mit einer funktionalen Sprache geschrieben wurden wie AI , Compiler , Theorem Provers und Reasoning Assistants .
Man könnte zwar meinen, dass die Übersetzung eines Programms von einer Sprache in eine andere eine triviale Aufgabe ist, in der Realität jedoch nicht nur in der Sprache, sondern auch in der Umgebung und den Werkzeugen, die gelernt und verstanden werden müssen die Übersetzung. Man muss die Tiefen beider Sprachen und ihrer Umgebungen erforschen, die normalerweise nicht berücksichtigt werden, wenn man nur darüber liest. Zum Beispiel habe ich bei der Übersetzung von Ocaml nach F # die oberste Ebene gelernt, ocamldebug und Zeitreisen, trace und wünschte, F # hätte dies, camlp4 und wie es nicht in F #, Ausnahmebehandlungs-Leistungsunterschieden existiert und Inferenz in einer Weise eingeben, dass zwang mich, die F # -Antworten auf eine Weise zu verstehen, die ich nicht hätte, wenn ich nur mit F # experimentiere oder Bücher lese.
Kennen Sie andere Bücher, die Quellcodes verwenden, vorzugsweise funktionale, die das Konzept der funktionalen Programmierung abdecken oder reale Anwendungen sind, die typischerweise in einer funktionalen Sprache geschrieben sind und die beim Erlernen der funktionalen Programmierung durch Übersetzen helfen der Quellcode zu F #?
Um dieses Ziel und nicht subjektiv zu halten, müssen die Antworten erklären, warum es wichtig ist, und Sie müssen das Buch nicht nur verwendet haben, um das Buch zu durchsuchen. Ich suche nach Antworten von Leuten, die seit Jahren funktionale Programmierung machen und die Arbeit in einem solchen Buch als Schlüssel zu ihrem Erfolg mit funktionaler Programmierung empfunden haben. Beispiele für Antworten:
Inferenz eingeben - " Typen und Programmiersprachen " ( WorldCat ) von Benjamin C. Pierce. Wichtigkeit: Hilft zu verstehen, wie Compilerfehler in Typinterferenzen aufgelöst werden können, was zu besseren Möglichkeiten führt, den Fehler zu beheben und zu besserem Code führt.
CPS - " Kompilieren mit Continuations " ( WorldCat ) von Andrew W. Appel - Wichtigkeit: Hilft, die Verwendung eines Stapels bei Rekursion zu entfernen und dadurch Überläufe zu stapeln und die Leistung zu verbessern. Ich denke an Tail-Call-Optimierung als Optimierung einer Funktion und CPS als Optimierung des Programms.
Begriff umschreiben - " Term Rewriting und all das " ( WoldCat ) von Franz Baader und Tobias Nipkow Bedeutung: Mit ATP und Proof-Assistenten , die in der Regel in einer funktionalen Sprache geschrieben sind und sich auf das Umschreiben von Termen verlassen. Wenn die Umschreibung falsch ist, ist die Proof-Engine ungültig.
Lambda-Kalkül - " Eine Einführung in die funktionale Programmierung durch Lambda-Kalkül " ( WorldCat ) von Greg Michaelson Bedeutung: Der Lambda-Kalkül ist die Grundlage funktionaler Programmierung. Das Verständnis dieses grundlegenden Konzepts führt zu einem besseren Verständnis der funktionalen Programmierung.
BEARBEITEN
Während ich warten möchte, bis eine bessere Antwort zu akzeptieren ist, habe ich gelernt, dass nach ein paar Tagen auf SO die Ansichten erheblich abklingen.
Ich finde, dass beide Antworten großartig für jemanden sind, der nicht mit den Büchern vertraut ist und dass, wenn ich die meisten Bücher nicht schon kannte und Kopien davon hätte, ich ernsthaft in Betracht ziehen würde, sie zu bekommen.
Da PAD die fortgeschritteneren Bücher notiert hat, was ich suchte, gebe ich ihm die Annahmeabstimmung. Wenn ich das akzeptieren könnte, würde ich das tun.
Sie sehen mir so unheimlich aus. Ich schlage ein paar grundsätzliche vor:
Rein funktionale Datenstrukturen Buch von Okasaki. Das Buch verwendet SML-Notationen; das Übersetzen seiner Beispiele in F # ist eine Herausforderung, da Funktoren fehlen. Aber der Vorteil ist riesig; Sie werden viel während des Prozesses lernen und andererseits der F # -Community enorm helfen. Wie @Jack P. erwähnt hat, wurden viele dieser Datenstrukturen auf F # portiert ; Sie könnten ein guter Anfang für Sie sein.
ML für den arbeitenden Programmierer von Paulson. Ich mag besonders den Teil, der Induktion verwendet, um die Korrektheit von Programmen zu beweisen. Ein paar große Beispiele im Buch wie Schreibinterpreter für den Lambda-Kalkül und Ein taktischer Theorembeweiser sind interessant und nahe an deinem Interessengebiet.
Ich bewundere Ihre Hartnäckigkeit des Lernens von F # durch Versuch-und-Irrtum-Prozess. Wenn du nach John Harrisons Buch überleben könntest, denke ich, dass nur sehr wenige dich herausfordern werden. Ich würde dir empfehlen, eine echte Anwendung in einer anderen funktionalen Sprache zu finden, die wir nicht in F # haben und sie portieren. Zum Beispiel, aus den Beispielen des Buches, Schreiben eines einfachen Proof-Assistenten in F # ähnlich wie Coq , Isabelle oder Hol-light ist nicht so weit.
Unter Berücksichtigung der in Ihrer Frage aufgeführten Titel sind Sie den Grundlagen bereits weit voraus. Aber wenn wir von Fundamentaldaten sprechen, würde ich vorschlagen, darüber nachzudenken:
Richard Bird, Philip Wadler - Einführung in die funktionale Programmierung, 1. Ed ISBN: 0134841891 (Buch FP Sprache ist Miranda)
und allzeit klassisch
Harold Abelson und Gerald Jay Sussman - Struktur und Interpretation of Computer Programs, 2. Ausgabe ISBN: 0262011530 (die FP-Sprache des Buches ist Scheme)
Tags und Links f# functional-programming