私はプログラミングを始めたばかりで、Python を使って数か月になります。私は Stackless で動作する概念を取得しようとしていますが、方法がわかりません (ただし、Stackless で動作する他のテスト スクリプトを作成しました)。
Anywho、煮詰めた例として、リストを実行し、同じ関数を再帰的に呼び出すことによって、リストのすべての順列 (編集: n 次元デカルト積) を見つける次のコードを検討してください。
def traverseList(theList,temp,solutions,level=1):
if level != len(theList):
for x in theList:
temp.append(x)
traverseList(theList,temp,solutions,level+1)
temp.pop()
else:
for x in theList:
temp.append(x)
solutions.append(temp[:])
temp.pop()
myList = ["a",None,2,"gamma",8] #the list doesn't always have just numbers
solutionList = []
tempList = []
traverseList(myList,tempList,solutionList)
print("%s... %s" %(solutionList[0], solutionList[-1]))
これにより、次の結果が得られます。
['a', 'a', 'a', 'a', 'a']... [8, 8, 8, 8, 8]
これまでのところ、スタックレスと再帰で見つけた唯一の例は、関数がすべて完了した後に関数の最後に情報を送信しているようです。上記で必要となるように、for ループの途中では使用しないでください。
一体どうやってこれを行うのでしょうか?これを再帰関数ではなくタスクレットで実行するスクリプトにするにはどうすればよいでしょうか? (このバージョンは私が思いつく最高のものですが、どのように配置しても失敗します。これは多くの試みの 1 つです。この時点でスパゲッティを壁に投げつけたほうがよいかもしれません。)
バウンスバック関数なしでそれを行う方法のためのボーナス e-cookie - 1 つのタスクレットを使用せずに、1 つのタスクレットに複数回情報を渡す方法をまだ見つけることができませんでした。
御時間ありがとうございます!