web-dev-qa-db-ja.com

Troff Turingは完成しましたか?

Troffは、.deを使用したマクロ定義と.ifを使用した分岐の両方をサポートしています( Troffユーザーマニュアルの5および6ページを参照してください )。これら2つの点で、TeXと非常によく似ています。ただし、Troffで書かれた非常に複雑なプログラムについては知りません(TeXのTikZとは異なります)。 Troff Turingは完成しましたか?

9
cutculus

ESRの The Art of Unix Programming は次のように主張しています:

Troffについては、第18章で詳しく説明します。とりあえず、本格的なインタプリタであることが条件となる命令型ミニ言語の良い例であることを指摘するだけで十分です(条件付きと再帰はありますが、ループはありません。誤ってチューリング完全です)。

(「偶然」とは対照的にm4、これは「意図的にチューリング完全」と言われています。)

12
muru

はい、troffはチューリング完全です。任意の再帰と条件付き分岐をサポートしていますが、これで十分です。また、データを保存するためのレジスタやその他のさまざまな方法があり、再び別のパスを提供します。

チューリングの完全性は、非常に複雑なプログラムが実用的であることを意味するものではありません-何らかの方法で何らかのレベルの削除が理論的に可能であることを意味します-その欠如は、そうでないことを意味しないので、どちらもtroffがチューリング完全であることも、複雑なプログラムが存在しないことも、それについて多くのことを示唆しているわけではありません。


チューリングの完全性は、一般的に、ユーザーに役立つ何かを意味するプロパティではありません。それが意味するのは、あなたがそれを使ってチューリングマシンをシミュレートできることであり、あなたが望んでいることではなく、それから得られる出力が何かのようなものではないということですあなたは読むことを期待するでしょう。入力または出力は、単なる数値ではなく、何かが表示される回数であり、有用なものではない場合があり、シミュレーションを実行するマシンの種類とそのプログラムは、最初はほとんど理解できない場合があります。

多くの言語とシステムは付随的にチューリング完全ですが、そのサブセットの実際のプログラミング(たとえば、コンウェイのライフゲームやCSS)には適度に適用できません。また、一部の言語は便利です実際のプログラミングはチューリング完全ではありません(たとえば、Agda)。明確な特徴は本当にあなたができることです

  • 永遠に進み続ける
  • 好きなだけデータを覚えてください
  • 次に何をすべきかを選択します

多くの場合、これらのプロパティ(特に非終了)は実際には望ましくなく、おそらくtroffを含みます。理論的なコンピューターサイエンスと言語設計以外では、チューリングの完全性は、キャッチーであるにもかかわらず、事実上、それほど興味深いものではありません。

13
Michael Homer