2016-08-10 5 views
1

Я новичок в Python, поэтому я этого не понимаю. Это какой-то машины Тьюринга, которая должна записать двоичное число, но я не могу понять, что происходит после того, как эти правилаМожет кто-нибудь объяснить мне этот машинный код Тьюринга?

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])] 

Это утверждение является присвоением деструктурирующим. Правая сторона задания даст вам вход правил, который является кортежем из трех элементов. Эти три элемента будут подчиняться состоянию, ленте [положение] и двигаться соответственно.

Еще одна вещь, которая может озадачить вас есть строка:

system = tick(*system) 

особенно *.

В этой строке вызывается функция галочки (процессорного такта) с содержимым «системы», которое распаковывается в отдельные параметры.

Надеюсь, это достаточно ясно, но тот факт, что вас интересует машина Тьюринга, говорит мне, что у вас есть что-то с компьютерным программированием ...;)

Смежные вопросы