2016-07-19 7 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 

このコードは正常に動作します。しかし、もともと、私は訪問した(2番目の行を参照してください)を追加し、再帰呼び出しにそれを与えました。これは、しかし、構文エラーを投げ:なしタイプオブジェクトとSTRを連結することはできません。

誰かが理由を説明できますか?

ありがとうございます!

答えて

0

NoneTypeは値を示していないオブジェクトであるNoneオブジェクトの型です。リストや他のオブジェクトには追加できません。

私はもっとコードを見ることができないので、恐らく起こっているのはcurrentが設定されていないため、値がNoneであり、リストに追加しようとするとそのエラーが発生します。

currentにデフォルト値を割り当て、[追加]を使用してコードを実行します。それは動作するはずです。

関連する問題