Frage

Wikipedia hat folgendes zu sagen:

  

Total funktionale Programmierung (auch   bekannt als starke funktionelle   Programmierung, werden kontrastiert mit   funktionelle gewöhnlich oder schwach   Programmierung) ist ein Programmierparadigma   die schränkt die Auswahl an Programmen   zu denen, die sind beweisbar   Abschluss.

und

  

bedeuten diese Einschränkungen, dass die Gesamt   funktionale Programmierung ist nicht   Turing-vollständig. Allerdings ist die Menge von   Algorithmen, die noch verwendet werden kann, ist   enorm. Zum Beispiel kann jeder Algorithmus,   hat eine asymptotische obere Schranke hatte   berechnet für sie belanglos sein können   in ein transformiertes   beweisbar abbrechenden Funktion durch die Verwendung   die obere Grenze als ein zusätzliches Argument   die auf jeder dekrementiert   Iteration oder Rekursion.

Es gibt auch eine Lambda Das entscheidende Beitrag zu einem Papier auf rel="noreferrer">.

Ich war nicht gekommen, über das bis letzte Woche auf einer Mailingliste.

Gibt es mehr Ressourcen, Referenzen oder alle Beispielimplementierungen, die Sie wissen?

War es hilfreich?

Lösung

Wenn ich das richtig verstanden hat, Total Functional Programming bedeutet nur, dass: Programmieren mit Gesamt Funktionen. Wenn ich richtig meine Mathe-Kurse erinnern, eine Gesamt-Funktion ist eine Funktion, die über ihre gesamte Domain definiert ist, eine Teilfunktion ist eine, die „Löcher“ in seiner Definition hat.

Nun, wenn Sie eine Funktion haben, die für einige Eingabewert v in eine unendliche Rekursion oder einer Endlosschleife oder im Allgemeinen geht nicht auf andere Art und Weise zu beenden, dann wird Ihre Funktion nicht für v definiert und somit Teil insgesamt, also nicht.

Insgesamt Funktionale Programmierung erlaubt Ihnen nicht, eine solche Funktion zu schreiben. Alle Funktionen geben immer ein Ergebnis für alle möglichen Eingaben; und der Typ-Checker stellt sicher, dass dies der Fall ist.

Meine Vermutung ist, dass dies erheblich vereinfacht die Fehlerbehandlung: Es gibt keine

.

Der Nachteil ist bereits in Ihrem Zitat erwähnt: es ist nicht Turing-vollständig. Z.B. Ein Betriebssystem ist im Wesentlichen ein Riese-Endlosschleife. In der Tat, wissen wir nicht wollen ein Betriebssystem zu beenden, rufen wir dieses Verhalten ein „Crash“ und auf unseren Computern über sie schreien!

Andere Tipps

Dies ist zwar eine alte Frage ist, glaube ich, dass keiner der Antworten bisher die reale erwähnen Motivation für insgesamt funktionale Programmierung, die dies:

Wenn Programme sind Beweise und Beweise sind Programme, dann Programme, die ‚Löcher‘ haben keinen Sinn als Beweise machen, und logische Inkonsistenz vor.

Grundsätzlich, wenn ein Beweis ist ein Programm, eine Endlosschleife verwendet werden kann, um zu beweisen, alles . Das ist wirklich schlecht, und bietet viel von der Motivation, warum wir völlig programmieren möchten. Andere Antworten sind in der Regel nicht aus dem Papier für die Kehrseite zu berücksichtigen. Während die Sprachen sind techincally nicht Turing abgeschlossen ist, können Sie mithilfe von Co-induktive Definitionen und Funktionen viele interessante Programme erholen. Wir sind sehr anfällig zu denken induktive Daten, aber CODATA dient einem wichtigen Zweck in diesen Sprachen, in denen Sie eine Definition völlig definieren, die unendlich ist (und wenn echte tun Berechnung, die Sie möglicherweise verwenden nur ein endliches Stück von diesem, oder vielleicht auch nicht, wenn Sie schreiben, ein Betriebssystem!).

beendet

Es ist auch bemerkenswert, dass die meisten Beweisassistenten auf diesem Prinzip basiert arbeiten, Coq, zum Beispiel.

Die Liebe ist eine andere Sprache, die Beendigung garantiert:
http://pll.cpsc.ucalgary.ca/charity1/www/home.html

Hume ist eine Sprache, mit 4 Ebenen. Die äußere Ebene ist Turing vollständig und die innerste Schicht garantiert Abschluss:
   http://www-fp.cs.st-andrews.ac. uk / hume / report /

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