Ja, troff ist Turing-komplett. Es unterstützt eine beliebige Rekursion und bedingte Verzweigung, was ausreichend ist. Es hat auch Register und verschiedene andere Möglichkeiten zum Speichern von Daten, wodurch Sie wieder einen anderen Pfad erhalten.
Die Vollständigkeit von Turing bedeutet nicht, dass hochkomplexe Programme praktisch sind - nur, dass sie auf einer bestimmten Ebene theoretisch irgendwie möglich sind - und ihre Abwesenheit bedeutet auch nicht, dass dies nicht der Fall ist. Weder ist Troff Turing-vollständig noch das Das Fehlen komplexer Programme lässt auf die eine oder andere Weise nicht viel zu.
Die Vollständigkeit ist im Allgemeinen keine Eigenschaft, die für Sie als Benutzer etwas Nützliches bedeutet. Es bedeutet, dass man kann mit ihm eine Turing - Maschine simulieren, nicht , dass Sie wollen würde, und nicht , dass die Ausgabe , dass Sie von ihm bekommen würde , ist etwas wie das, was Sie zu lesen erwarten würde. Die Eingabe oder Ausgabe kann nur eine Zahl sein oder sogar die Häufigkeit, mit der etwas erscheint, und nicht etwas Nützliches. Die Art der Maschine, die Sie am Ende simulieren, und ihre Programme sind anfangs oft kaum nachvollziehbar.
Viele Sprachen und Systeme sind im Übrigen Turing-vollständig, aber für eine tatsächliche Programmierung in dieser Teilmenge (z. B. Conways Game of Life oder CSS) nicht angemessen anwendbar, und einige Sprachen, die für die echte Programmierung nützlich sind , sind nicht Turing-vollständig (z. Agda). Die bestimmenden Merkmale sind wirklich, dass Sie können
- mach weiter für immer
- Speichern Sie so viele Daten, wie Sie möchten
- Wählen Sie, was Sie als Nächstes tun möchten
Oft sind diese Eigenschaften - insbesondere die Nichtbeendigung - tatsächlich unerwünscht, möglicherweise auch für troff. Außerhalb der theoretischen Informatik und des Sprachdesigns ist die Vollständigkeit von Turing praktisch keine besonders interessante Eigenschaft, obwohl sie eingängig ist.