2016-07-19 23 views
0

我對下面的遞歸函數有個疑問。給定一個字典模擬非確定性有限狀態機的遞歸函數

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

和接受狀態

accepting = [5] 

此功能通過FSM找到有效路徑:

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 

此代碼的工作就好了。但最初,我已經追加了當前訪問(見else之後的第二行),並將其饋入遞歸調用。但是,這引發了語法錯誤:無法將str與None類型對象連接起來。

有人可以解釋爲什麼嗎?

謝謝!

回答

0

NoneTypeNone對象的類型,它是指示沒有值的對象。您不能將其添加到列表或其他對象。

因爲我看不到更多的代碼,可能發生的是current沒有設置,因此它的值爲None,並且當您嘗試將它追加到列表中時,會出現該錯誤。

將默認值分配給current,然後使用append運行您的代碼。它應該工作。