Was sind die Einschränkungen der gesamten funktionalen Programmierung? Es ist nicht vollständig für Turing, unterstützt jedoch eine große Teilmenge der möglichen Programme. Gibt es wichtige Konstrukte, die Sie in einer Turing-vollständigen Sprache schreiben könnten, aber nicht in einer vollständigen funktionalen Sprache?
Und ist es richtig zu sagen, dass Programme, die in total funktionalen Sprachen geschrieben sind, vollständig statisch analysiert werden können, während die statische Analyse in Turing-complete-Sprachen durch Dinge wie das Halteproblem begrenzt ist? Damit meine ich nicht, dass in total funktionalen Sprachen alles statisch bestimmt werden kann, weil manche Dinge nur zur Laufzeit bekannt sind, sondern ich meine, dass theoretisch in einer idealen total funktionalen Programmiersprache geschriebene Programme analysiert werden können, damit alles das könnte theoretisch statisch bestimmt werden kann statisch bestimmt werden. Oder gibt es immer noch unentscheidbare Probleme in funktionalen Gesamtsprachen, die die statische Analyse unvollständig machen? Einige Probleme werden immer unentscheidbar sein, egal in welcher Sprache sie geschrieben sind, aber ich bin an solchen Problemen interessiert, die von der Sprache geerbt werden.
quelle
X
ist(identity X)
eine Turing-Maschine ein Stillstand?" Sicher, das scheint nicht zu sein , etwaidentity
, aber wie „über“ Sie definieren?Die Kehrseite davon ist jedoch, dass die Grenzen der Ausdruckskraft der Gesamtsprachen im Wesentlichen die Grenzen der Ausdruckskraft der Mathematik selbst sind . Zum Beispiel sind die in Coq (einem Proof-Assistenten) definierbaren Funktionen diejenigen, deren Berechenbarkeit mit ZFC nachgewiesen werden kann, mit zählbar vielen unzugänglichen Kardinälen. Im Grunde genommen ist jede Funktion, die Sie zur Zufriedenheit eines arbeitenden Mathematikers als total erweisen könnten, in Coq definierbar.
Die Kehrseite der Kehrseite ist, dass Mathematik schwer ist! Es gibt also keinen einfachen Sinn, in dem Gesamtsprachen "vollständig analysierbar" sind - selbst wenn Sie wissen, dass eine Funktion beendet wird, müssen Sie möglicherweise noch viel kreative Arbeit leisten, um zu beweisen, dass sie eine gewünschte Eigenschaft hat. Wenn Sie zum Beispiel nur wissen, dass eine Funktion von Listen zu Listen total ist, können Sie nicht weit genug gehen, um zu beweisen, dass es sich um eine Sortierfunktion handelt.
quelle