最終更新日 2007年4月21日
TURING.EXE でプログラミングしてみましょう。
TURING.EXE を立ち上げます。
チューリング・マシンのプログラムは、小さな子供の遊んでいる様子をイメージすればいいです。
上図のような初期データが与えられたとき 0 をすべて 1 に変えるプログラムを考えて見ます。
先頭から右に一つずつ調べて、0 があれば 1 に変え、1 であればそのままにします。 一つ処理した後も同じことをすればいいので、状態を変える必要はありません。 従って、
0 | 0 | 1 | 0 | R |
0 | 1 | 1 | 0 | R |
0 | 0 | 1 | 0 | R |
0 | 1 | 0 | 0 | R |
0 | B | B | 1 | R |
1 | 1 | 1 | 1 | R |
1 | 0 | B | 2 | R |
2 | 0 | 0 | 2 | R |
2 | 1 | 1 | 2 | R |
2 | B | B | 3 | R |
3 | B | 0 | 4 | R |
0 | B | B | 1 | R |
1 | 1 | 1 | 1 | R |
1 | 0 | B | 2 | R |
2 | 0 | 0 | 2 | R |
2 | 1 | 1 | 2 | R |
2 | B | B | 3 | R |
3 | B | 0 | 4 | R |
3 | B | 0 | 4 | L |
4 | 0 | 0 | 4 | L |
4 | B | B | 5 | L |
5 | 0 | 0 | 5 | L |
5 | 1 | 1 | 5 | L |
5 | B | B | 1 | R |
3 | 0 | 0 | 3 | R |
0 | B | B | 1 | R |
1 | 1 | 1 | 1 | R |
1 | 0 | B | 2 | R |
2 | 0 | 0 | 2 | R |
2 | 1 | 1 | 2 | R |
2 | B | B | 3 | R |
3 | B | 0 | 4 | L |
4 | 0 | 0 | 4 | L |
4 | B | B | 5 | L |
5 | 0 | 0 | 5 | L |
5 | 1 | 1 | 5 | L |
5 | B | B | 1 | R |
3 | 0 | 0 | 3 | R |
1 | B | B | 6 | L |
6 | B | B | 6 | L |
6 | 1 | B | 7 | R |
7 | B | B | 7 | R |
7 | 0 | 0 | 8 | R |
7 | 1 | 1 | 8 | R |
8 | 0 | 0 | 8 | R |
8 | 1 | 1 | 8 | R |
8 | B | 1 | 9 | L |
9 | 0 | 0 | 9 | R |
9 | 1 | 1 | 9 | R |
9 | B | B | 6 | L |
0 | B | X | 1 | R |
6 | X | B | 10 | L |
0 | B | X | 1 | R |
1 | 1 | 1 | 1 | R |
1 | 0 | B | 2 | R |
2 | 0 | 0 | 2 | R |
2 | 1 | 1 | 2 | R |
2 | B | B | 3 | R |
3 | B | 0 | 4 | L |
4 | 0 | 0 | 4 | L |
4 | B | B | 5 | L |
5 | 0 | 0 | 5 | L |
5 | 1 | 1 | 5 | L |
5 | B | B | 1 | R |
3 | 0 | 0 | 3 | R |
1 | B | B | 6 | L |
6 | B | B | 6 | L |
6 | 1 | B | 7 | R |
7 | B | B | 7 | R |
7 | 0 | 0 | 8 | R |
7 | 1 | 1 | 8 | R |
8 | 0 | 0 | 8 | R |
8 | 1 | 1 | 8 | R |
8 | B | 1 | 9 | L |
9 | 0 | 0 | 9 | L |
9 | 1 | 1 | 9 | L |
9 | B | B | 6 | L |
6 | X | B | 10 | R |
諦めて、プログラムをチェックしてみます。問題は
0 が1つも無かった場合と 0 を処理し終えた場合を区別していなかった
ことにあります。
空白(B で表現する)に出会うまで引っ返すという状態(5)で
空白(B で表現する)に出会うと、空白(B で表現する)を書き込み、
最初にやったことと同じことをすればいいから、
これから 0 を見付けなければいけないという状態(1)に変わります。
5 | B | B | 1 | R |
0 が見つかった場合の処理をします。 空白(B で表現する)に出会うまで引っ返すという状態(5)で 空白(B で表現する)に出会うと、空白(B で表現する)を書き込み、 再度 0 を見付けなければいけないという状態(11)に変わります。
5 | B | B | 11 | R |
11 | 1 | 1 | 11 | R |
11 | 0 | B | 2 | R |
11 | B | B | 6 | L |
そこで、0 が1つも無かった場合の処理を考えます。 これから 0 を見付けなければいけないという状態(1) で、初期データの終わりの印の空白(B で表現する)を見付けると、 0 なしで 1 を見付けるために戻るという状態(12)に変化させます。
1 | B | B | 12 | L |
12 | 1 | B | 13 | R |
13 | B | B | 14 | R |
14 | B | 1 | 9 | L |
最終的なプログラムは次のようになります。
0 | B | X | 1 | R |
1 | 1 | 1 | 1 | R |
1 | 0 | B | 2 | R |
2 | 0 | 0 | 2 | R |
2 | 1 | 1 | 2 | R |
2 | B | B | 3 | R |
3 | B | 0 | 4 | L |
4 | 0 | 0 | 4 | L |
4 | B | B | 5 | L |
5 | 0 | 0 | 5 | L |
5 | 1 | 1 | 5 | L |
5 | B | B | 11 | R |
3 | 0 | 0 | 3 | R |
1 | B | B | 12 | L |
6 | B | B | 6 | L |
6 | 1 | B | 7 | R |
7 | B | B | 7 | R |
7 | 0 | 0 | 8 | R |
7 | 1 | 1 | 8 | R |
8 | 0 | 0 | 8 | R |
8 | 1 | 1 | 8 | R |
8 | B | 1 | 9 | L |
9 | 0 | 0 | 9 | L |
9 | 1 | 1 | 9 | L |
9 | B | B | 6 | L |
6 | X | B | 10 | R |
11 | 1 | 1 | 11 | R |
11 | 0 | B | 2 | R |
11 | B | B | 6 | L |
12 | 1 | B | 13 | R |
13 | B | B | 14 | R |
14 | B | 1 | 9 | L |
要するに、チューリングマシンのプログラミングはパズルを解くようなものです。
他人が書いたプログラムを試験の時だけ覚えていても何にも
ならないし、第一、意味もよく分からないものを覚えるのは苦痛以外の何者でもありません。上で解説したようにすれば、自力でプログラミングできます。
自力でプログラムが作れたら、その喜びは大変なものであり、俄然プログラミングが楽しくなり、益々、チューリングマシンに対する興味が湧いてきます。
演習問題をいくつかあげておきます。
0 | 0 | Z | 1 | R |
0 | 1 | W | 1 | R |
1 | 0 | 0 | 1 | R |
1 | 1 | 1 | 1 | R |
1 | + | + | 1 | R |
1 | = | = | 2 | L |
2 | 0 | Y | 4 | L |
2 | 1 | Y | 5 | L |
3 | 0 | Y | 5 | L |
3 | 1 | Y | 6 | L |
4 | + | + | 7 | L |
5 | + | + | 8 | L |
6 | + | + | 9 | L |
7 | X | X | 7 | L |
8 | X | X | 8 | L |
9 | X | X | 9 | L |
7 | 0 | X | 10 | R |
7 | 1 | X | 11 | R |
8 | 0 | X | 11 | R |
8 | 1 | X | 12 | R |
9 | 0 | X | 12 | R |
9 | 1 | X | 13 | R |
10 | 0 | 0 | 10 | R |
10 | 1 | 1 | 10 | R |
10 | + | + | 10 | R |
10 | = | = | 10 | R |
10 | X | X | 10 | R |
10 | Y | Y | 10 | R |
11 | 0 | 0 | 11 | R |
11 | 1 | 1 | 11 | R |
11 | + | + | 11 | R |
11 | = | = | 11 | R |
11 | X | X | 11 | R |
11 | Y | Y | 11 | R |
12 | 0 | 0 | 12 | R |
12 | 1 | 1 | 12 | R |
12 | + | + | 12 | R |
12 | = | = | 12 | R |
12 | X | X | 12 | R |
12 | Y | Y | 12 | R |
13 | 0 | 0 | 13 | R |
13 | 1 | 1 | 13 | R |
13 | + | + | 13 | R |
13 | = | = | 13 | R |
13 | X | X | 13 | R |
13 | Y | Y | 13 | R |
10 | B | B | 14 | L |
11 | B | B | 15 | L |
12 | B | B | 16 | L |
13 | B | B | 17 | L |
14 | 0 | B | 18 | R |
14 | 1 | B | 19 | R |
15 | 0 | B | 20 | R |
15 | 1 | B | 21 | R |
16 | 0 | B | 22 | R |
16 | 1 | B | 23 | R |
17 | 0 | B | 24 | R |
17 | 1 | B | 25 | R |
18 | B | 0 | 14 | L |
19 | B | 1 | 14 | L |
20 | B | 0 | 15 | L |
21 | B | 1 | 15 | L |
22 | B | 0 | 16 | L |
23 | B | 1 | 16 | L |
24 | B | 0 | 17 | L |
25 | B | 1 | 17 | L |
14 | B | B | 14 | L |
15 | B | B | 15 | L |
16 | B | B | 16 | L |
17 | B | B | 17 | L |
14 | = | = | 26 | R |
15 | = | = | 27 | R |
16 | = | = | 28 | R |
17 | = | = | 29 | R |
26 | B | 0 | 2 | L |
27 | B | 1 | 2 | L |
28 | B | 0 | 3 | L |
29 | B | 1 | 3 | L |
2 | = | = | 2 | L |
3 | = | = | 3 | L |
2 | Y | Y | 2 | L |
3 | Y | Y | 3 | L |
2 | + | + | 30 | L |
3 | + | + | 31 | L |
30 | X | X | 30 | L |
31 | X | X | 31 | L |
30 | Z | X | 32 | R |
30 | W | X | 33 | R |
31 | Z | X | 33 | R |
31 | W | X | 34 | R |
7 | Z | X | 32 | R |
7 | W | X | 33 | R |
8 | Z | X | 33 | R |
8 | W | X | 34 | R |
9 | Z | X | 34 | R |
9 | W | X | 35 | R |
32 | X | X | 32 | R |
32 | + | + | 32 | R |
32 | Y | Y | 32 | R |
32 | = | = | 32 | R |
32 | 0 | 0 | 32 | R |
32 | 1 | 1 | 32 | R |
33 | X | X | 33 | R |
33 | + | + | 33 | R |
33 | Y | Y | 33 | R |
33 | = | = | 33 | R |
33 | 0 | 0 | 33 | R |
33 | 1 | 1 | 33 | R |
34 | X | X | 34 | R |
34 | + | + | 34 | R |
34 | Y | Y | 34 | R |
34 | = | = | 34 | R |
34 | 0 | 0 | 34 | R |
34 | 1 | 1 | 34 | R |
35 | X | X | 35 | R |
35 | + | + | 35 | R |
35 | Y | Y | 35 | R |
35 | = | = | 35 | R |
35 | 0 | 0 | 35 | R |
35 | 1 | 1 | 35 | R |
32 | B | B | 36 | L |
33 | B | B | 37 | L |
34 | B | B | 38 | L |
35 | B | B | 39 | L |
36 | 0 | B | 40 | R |
36 | 1 | B | 41 | R |
37 | 0 | B | 42 | R |
37 | 1 | B | 43 | R |
38 | 0 | B | 44 | R |
38 | 1 | B | 45 | R |
39 | 0 | B | 46 | R |
39 | 1 | B | 47 | R |
40 | B | 0 | 36 | L |
41 | B | 1 | 36 | L |
42 | B | 0 | 37 | L |
43 | B | 1 | 37 | L |
44 | B | 0 | 38 | L |
45 | B | 1 | 38 | L |
46 | B | 0 | 39 | L |
47 | B | 1 | 39 | L |
36 | B | B | 36 | L |
37 | B | B | 37 | L |
38 | B | B | 38 | L |
39 | B | B | 39 | L |
36 | = | = | 48 | R |
37 | = | = | 49 | R |
38 | = | = | 50 | R |
39 | = | = | 51 | R |
48 | B | 0 | -1 | R |
49 | B | 1 | -1 | R |
50 | B | 0 | 52 | R |
51 | B | 1 | 52 | R |
52 | 0 | 0 | 52 | R |
52 | 1 | 1 | 52 | R |
52 | B | B | 53 | L |
53 | 0 | B | 54 | R |
53 | 1 | B | 55 | R |
54 | B | 0 | 53 | L |
55 | B | 1 | 53 | L |
53 | B | B | 53 | L |
53 | = | = | 56 | R |
56 | B | 1 | -1 | R |
30 | 0 | X | 57 | R |
30 | 1 | X | 58 | R |
31 | 0 | X | 58 | R |
31 | 1 | X | 59 | R |
57 | X | X | 57 | R |
57 | + | + | 57 | R |
57 | Y | Y | 57 | R |
57 | = | = | 57 | R |
57 | 0 | 0 | 57 | R |
57 | 1 | 1 | 57 | R |
58 | X | X | 58 | R |
58 | + | + | 58 | R |
58 | Y | Y | 58 | R |
58 | = | = | 58 | R |
58 | 0 | 0 | 58 | R |
58 | 1 | 1 | 58 | R |
59 | X | X | 59 | R |
59 | + | + | 59 | R |
59 | Y | Y | 59 | R |
59 | = | = | 59 | R |
59 | 0 | 0 | 59 | R |
59 | 1 | 1 | 59 | R |
57 | B | B | 60 | L |
58 | B | B | 61 | L |
59 | B | B | 62 | L |
60 | 0 | B | 63 | R |
60 | 1 | B | 64 | R |
61 | 0 | B | 65 | R |
61 | 1 | B | 66 | R |
62 | 0 | B | 67 | R |
62 | 1 | B | 68 | R |
63 | B | 0 | 60 | L |
64 | B | 1 | 60 | L |
65 | B | 0 | 61 | L |
66 | B | 1 | 61 | L |
67 | B | 0 | 62 | L |
68 | B | 1 | 62 | L |
60 | B | B | 60 | L |
61 | B | B | 61 | L |
62 | B | B | 62 | L |
60 | = | = | 69 | R |
61 | = | = | 70 | R |
62 | = | = | 71 | R |
69 | B | 0 | 2 | L |
70 | B | 1 | 2 | L |
71 | B | 0 | 3 | L |
4 | 0 | 0 | 72 | L |
4 | 1 | 1 | 72 | L |
5 | 0 | 0 | 73 | L |
5 | 1 | 1 | 73 | L |
6 | 0 | 0 | 74 | L |
6 | 1 | 1 | 74 | L |
72 | 0 | 0 | 72 | L |
72 | 1 | 1 | 72 | L |
73 | 0 | 0 | 73 | L |
73 | 1 | 1 | 73 | L |
74 | 0 | 0 | 74 | L |
74 | 1 | 1 | 74 | L |
72 | + | + | 75 | L |
73 | + | + | 76 | L |
74 | + | + | 77 | L |
75 | X | X | 75 | L |
76 | X | X | 76 | L |
77 | X | X | 77 | L |
75 | 0 | X | 10 | R |
75 | 1 | X | 11 | R |
76 | 0 | X | 11 | R |
76 | 1 | X | 12 | R |
77 | 0 | X | 12 | R |
77 | 1 | X | 13 | R |
75 | Z | X | 78 | R |
75 | W | X | 79 | R |
76 | Z | X | 79 | R |
76 | W | X | 80 | R |
77 | Z | X | 80 | R |
77 | W | X | 81 | R |
78 | X | X | 78 | R |
78 | + | + | 78 | R |
78 | 0 | 0 | 78 | R |
78 | 1 | 1 | 78 | R |
78 | Y | Y | 78 | R |
78 | = | = | 78 | R |
79 | X | X | 79 | R |
79 | + | + | 79 | R |
79 | 0 | 0 | 79 | R |
79 | 1 | 1 | 79 | R |
79 | Y | Y | 79 | R |
79 | = | = | 79 | R |
80 | X | X | 80 | R |
80 | + | + | 80 | R |
80 | 0 | 0 | 80 | R |
80 | 1 | 1 | 80 | R |
80 | Y | Y | 80 | R |
80 | = | = | 80 | R |
81 | X | X | 81 | R |
81 | + | + | 81 | R |
81 | 0 | 0 | 81 | R |
81 | 1 | 1 | 81 | R |
81 | Y | Y | 81 | R |
81 | = | = | 81 | R |
78 | B | B | 82 | L |
79 | B | B | 83 | L |
80 | B | B | 84 | L |
81 | B | B | 85 | L |
82 | 0 | B | 86 | R |
82 | 1 | B | 87 | R |
83 | 0 | B | 88 | R |
83 | 1 | B | 89 | R |
84 | 0 | B | 90 | R |
84 | 1 | B | 91 | R |
85 | 0 | B | 92 | R |
85 | 1 | B | 93 | R |
86 | B | 0 | 82 | L |
87 | B | 1 | 82 | L |
88 | B | 0 | 83 | L |
89 | B | 1 | 83 | L |
90 | B | 0 | 84 | L |
91 | B | 1 | 84 | L |
92 | B | 0 | 85 | L |
93 | B | 1 | 85 | L |
82 | B | B | 82 | L |
83 | B | B | 83 | L |
84 | B | B | 84 | L |
85 | B | B | 85 | L |
82 | = | = | 94 | R |
83 | = | = | 95 | R |
84 | = | = | 96 | R |
85 | = | = | 97 | R |
94 | B | 0 | 98 | L |
95 | B | 1 | 98 | L |
96 | B | 0 | 99 | L |
97 | B | 1 | 99 | L |
98 | = | = | 98 | L |
99 | = | = | 99 | L |
98 | Y | Y | 98 | L |
99 | Y | Y | 99 | L |
98 | 0 | Y | 78 | R |
98 | 1 | Y | 79 | R |
99 | 0 | Y | 79 | R |
99 | 1 | Y | 80 | R |
98 | + | + | -1 | R |
99 | + | + | 100 | R |
100 | Y | Y | 100 | R |
100 | = | = | 100 | R |
100 | 0 | 0 | 100 | R |
100 | 1 | 1 | 100 | R |
100 | B | B | 101 | L |
101 | 0 | B | 102 | R |
101 | 1 | B | 103 | R |
102 | B | 0 | 101 | L |
103 | B | 1 | 101 | L |
101 | B | B | 101 | L |
101 | = | = | 104 | R |
104 | B | 1 | -1 | R |