我對編程相當陌生,現在我已經用Python工作了幾個月。我試圖讓一個概念與Stackless一起工作,但是卻無法弄清楚(雖然我寫了other test scripts與Stackless一起工作)。Stackless Python - 遞歸for循環?
作爲一個簡化的例子,任何人都應該考慮下面的代碼,該代碼遍歷一個列表,並通過遞歸調用相同的函數找到它的所有排列(編輯: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]
到目前爲止,似乎我找到Stackless的和遞歸的唯一實例具有的功能在函數結束的信息發送出去這一切都完成之後。從不在for循環的中間,就像上面的那樣。
如何赫克我會做到這一點?我將如何將它變成一個腳本,可以使用tasklet而不是遞歸函數運行? (This version是我能想到的最好的,但是無論我怎麼安排它都會失敗,這是很多次嘗試中的一次,我不妨把意大利麪扔在牆上)
Bonus e- cookie的方式來做到這一點沒有bounceBack功能 - 我還沒有找到一種方法讓一個單獨的tasklet多次傳遞信息給自己,沒有一個。
謝謝你的時間!
我知道字面上一無所知Stackless的Python,但我覺得我應該做一些輕微的音符。首先,我建議不要使用'main'作爲變量名稱。其次,它不計算排列,它計算n元素列表的n維笛卡爾乘積。 (一個5元素列表只有120個排列)。第三,[遞歸](http://en.wikipedia.org/wiki/Recursion_(computer_science))和[concurrency](http://en.wikipedia。 org/wiki/Concurrency_(computer_science))並不完全相同。抱歉,我無法幫助您解決主要問題! – senderle 2011-06-10 03:44:04
對於使用'主',這是有道理的,我會牢記它。至於笛卡爾產品......我不能保證我會記住這個詞,但我會盡量記住它們之間的差異。遞歸與併發之間的差異相同。在教自己的時候很難把所有的單詞都講清楚,但我會盡我所能。謝謝! – squid808 2011-06-10 12:13:41