web-dev-qa-db-ja.com

LaTeXはチューリング完全だと聞いたことがあります。 LaTeXで書かれたプログラムはありますか?

通常組版言語と考えられているもので面白いことをすることは可能です。たとえば、マンデルブロ集合 postscriptを使用 を構築できます。

このMathOverflowの質問 で、LaTeXが Turing-complete である可能性があることが示唆されています。これは、任意のプログラムを書く能力を意味します(ただし、簡単ではないかもしれません!)。 LaTeXでこのようなプログラムの具体的な例を知っている人はいますか?

70
ire_and_curses

The Monad Reader の第13号では、Stephen HicksがICFPコンテスト(Mars rover navigationを含む)のソリューションの実装について書いていますTeXでは、マクロを多用しています。面白いことに、タイプセットがローバーのパスのポストスクリプトマップである場合のソリューションの出力。

81
Derrick Turk

あるいは、Andrew Greeneは TeXのBASICインタープリター詳細 )を書きました。これはわずかにひねくれたものとしてカウントされる場合があります。

24
Norman Gray

pgfmathライブラリーは今でも私を驚かせます。しかし、よりチューリングに関連したメモ: http://en.literateprograms.org/Turing_machine_simulator_(LaTeX) のように、TeXで実際のチューリングマシンを書くことができます。これは、TeXで拡張機能を使用する便利な方法です。

PostScriptもチューリング完全です。もし マニュアル を読めば、その一般的なプログラミング機能に驚かれることでしょう(少なくとも、私はそうでした)。

8
Pieter

\ def\K#1#2 {#2}

\ def\S#1#2#3 {#1#3 {#2#3}}

7
Mateusz Grotek

これがprogrammingそのものかどうかはわかりませんが、最近、LaTeXでObject Orientedのようなものをやろうとしています。 (以下に従うために数学を知る必要はありません。)最近の論文で、categoriesについて書いています。これはobjects。それらのかなりの数があったので、例えば、????が典型的なオブジェクト[〜#〜] c [〜#〜]および典型的な形態を持つカテゴリであるように、一貫したスタイルを望んでいました- c。次に、[〜#〜] d [〜#〜]およびdを付けたhaveも使用します。そこで、「クラス」を定義し、「カテゴリ」と言って(そこでジョークを理解するには数学者である必要があります)、Cがこのクラスのインスタンスであることを宣言し、\ ccat、\ cobj、\ cmorにアクセスしますなどなど。\cat {c}、\ obj {c}、および\ mor {c}などを行わない理由は、これらのカテゴリに特別な名前がある場合があるため、インスタンスを宣言した後、その名前を非常に簡単に変更できるからです。 (単に\ ccatを再定義します。\ ccatは、数学モードでは\ mathccatを、テキストモードでは\ textccatを選択するラッパーなので、実際には\ mathccatを再定義します)。 (もちろん、上記の提案よりも少し複雑で、古いカテゴリのバリアントとして新しいカテゴリを定義したい場合、OO stuffは本当に役立ちます(それでも対処できます)古いものがまだ存在しない場合)。

実際のプログラミングとして適格ではないかもしれませんが、私はそれを論文で使用しており、有用であることがわかります-他の回答(これまでのところ)は、実用的な問題に対する賢明な解決策よりもLaTeXの機能を披露する感触があります。

5
Loop Space

LaTeXで ACMコンテストの問題 の答えを書いた人を知っています。

1
Amber