2016-07-19 2 views
0

아래의 재귀 함수에 대한 질문이 있습니다.비 결정적 유한 상태 기계를 시뮬레이트하는 재귀 함수

def nfsmaccepts(current, edges, accepting, visited): 
    # base case 
    if current in visited: 
     return None 
    elif current in accepting: 
     return "" 
    else: 
     newvisited = visited + [current] 
     # visited.append(current) 
     for edge in edges: 
      if current in edge: 
       letter = edge[1] 
       for destination in edges[(current, letter)]: 
        foo = nfsmaccepts(destination, edges, accepting, newvisited) 
        if foo != None: 
         return letter + nfsmaccepts(destination, edges, accepting, newvisited) 
     return None 

이 코드는 잘 작동 : 사전

edges = { (1, 'a') : [2, 3], 
      (2, 'a') : [2], 
      (3, 'b') : [4, 2], 
      (4, 'c') : [5] } 

하고 받아들이는 상태

accepting = [5] 

이 기능은 FSM을 통해 올바른 경로를 찾아 주어. 그러나 원래, 나는 방문한 (두 번째 줄을 보시오)에 전류를 덧붙여서 재귀 적 호출에 그것을 공급했다. 그러나이 경우 구문 오류가 발생합니다. str을 None type 개체와 연결할 수 없습니다.

누군가 설명 할 수 있습니까?

감사합니다.

답변

0

NoneType은 값이 없음을 나타내는 개체 인 None 개체의 형식입니다. 목록이나 다른 객체에는 추가 할 수 없습니다.

코드가 더 이상 볼 수 없기 때문에 current이 설정되어 있지 않으므로 값이 None이고 목록에 추가하려고하면 오류가 발생합니다.

current에 기본값을 할당하고 append를 사용하여 코드를 실행하십시오. 그것은 작동해야합니다.

관련 문제