3

私は工学部の最終学年の学生です。私と私の友人は、最終年度のプロジェクトを「テンプレートメタプログラミングを使用したチューリングマシンのシミュレーション」にすることを決定しました。

「チューリングマシン」と「テンプレートメタプログラミング」とは何かは理解していますが、TMPを使用せずにチューリングマシンを設計すると、なぜシミュレーションが面倒になるのでしょうか。TMPを使用した場合、どのような利点が得られますか。また、TMPを使用せずに従来のアプローチを使用した場合、どのようなメリットが得られますか。

どのように進めるかについての提案はありますか?

4

3 に答える 3

10

テンプレートメタプログラミングを使用してチューリングマシンを実装する主な理由は、「通常の」C ++よりも簡単だからではなく(そうではない)、C++テンプレートがチューリング完全であることを示すためです。

于 2010-10-19T13:17:23.137 に答える
5

テンプレートメタプログラミングを使用してチューリングマシンのシミュレーションを設計することに利点はないと思います。それは実際には、両手を背中の後ろで結び、ホイルを歯の間に保持するフェンシングのようなものです。

これを行う理由は、C ++テンプレートシステムの能力を理解し、C ++テンプレート(したがってC ++コンパイラ)がチューリング完全であることを証明するためです。

于 2010-10-19T13:18:30.463 に答える
1

そのTMの完全性を示すには、ラムダ計算を実装するだけで十分です。

とにかく、シンボルとしてビットを使用し、最大バンド長が64ビットの制限付きTMを実装するのは簡単かもしれません。ここで、ブランクは0です。別の方法として、ブランの書き込みを禁止し、左右のターミネータの相対位置をカウントすることもできます。 ; その後、65ビット幅になります。uint64_tは、BigEndianでは右に、LittleEndianでは左にすべてのビットを保持します。アクティブビットは、独自のテンプレートパラメータに含まれている必要があります。バンドの1ビットが0のままであるか、バンドの終わりを示すカウンターがあります。

于 2010-10-23T21:31:29.710 に答える