2016-08-10 2 views
1

私はこれを本当に理解していないので、初心者です。これは、2進数を書くべきチューリングマシンのいくつかの種類だが、私はそれは、ステートマシンである誰かがこのチューリングマシンコードを私に説明することはできますか?

from collections import defaultdict 
import operator 

# Binary counter 
# (Current state, Current symbol) : (New State, New Symbol, Move) 
rules = { 
    (0, 1): (0, 1, 1), 
    (0, 0): (0, 0, 1), 
    (0, None): (1, None, -1), 
    (1, 0): (0, 1, 1), 
    (1, 1): (1, 0, -1), 
    (1, None): (0, 1, 1), 
} 
# from here I don't really understand what's going on 

def tick(state=0, tape=defaultdict(lambda: None), position=0): 
    state, tape[position], move = rules[(state, tape[position])] 
    return state, tape, position + move 

system =() 
for i in range(255): 
    system = tick(*system) 
    if(system[2] == 0): 
     print(map(operator.itemgetter(1), sorted(system[1].items()))) 

答えて

1

これらのルールの後に何が起こっているのかを把握することはできません。それぞれで は、新しい状態をチェックこの行の「テープ位置」での古い状態とテープの内容に基づいて計算される:

state, tape[position], move = rules[(state, tape[position])] 

この文は、分割代入です。課題の右側には、3つの要素のタプルであるルールの入力があります。これらの3つの要素は、状態、テープ[位置]、および移動のそれぞれに合意されます。

system = tick(*system) 

特に*:あなたのパズルかもしれない

もう一つはラインです。

この行では、(プロセッサクロック)ティック関数が呼び出され、 'system'タプルの内容が別のパラメータに展開されます。

私はこれが十分にはっきりしていることを望みますが、あなたがチューリングマシンに興味があるという事実は、あなたがコンピュータプログラミングで何かを持っていることを教えてくれます...;)

関連する問題