2016-08-10 12 views
1

저는 파이썬에 초보자입니다. 그래서 저는 이것을 정말로 이해하지 못합니다. 그것은 진수를 작성해야 튜링 기계의 일종이지만, 나는이 규칙누군가이 튜링 기계 코드를 나에게 설명 할 수 있습니까?

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

이 문은 destructuring 할당입니다 : 각에서 새로운 상태가 이전 상태와이 라인에서 '테이프 위치'에서 테이프의 내용을 기반으로 계산됩니다 틱. 과제의 오른편쪽에 세 가지 요소로 구성된 규칙이 들어 있습니다. 이 세 가지 요소는 각각 상태, 테이프 [위치] 및 이동으로 할당됩니다.

system = tick(*system) 

특히 * : 당신이 퍼즐 수

또 다른 것은 선이다.

이 줄에서는 (프로세서 클록) 틱 함수가 호출되어 튜플 '시스템'의 내용이 개별 매개 변수로 풀립니다.

나는이 충분히 명확 희망하지만 튜링 기계에 관심이 있다는 사실은 컴퓨터 프로그래밍 ... 뭔가있어 하더군요;)을