在Python,我可以做這樣的事情:斯卡拉的理解何時是懶惰的?
lazy = ((i,j) for i in range(0,10000) for j in range(0,10000))
sum((1 for i in lazy))
這將需要一段時間,但內存使用是恆定的。
同樣的結構中階:
(for(i<-0 to 10000; j<-i+1 to 10000) yield (i,j)).count((a:(Int,Int)) => true)
一段時間後,我得到一個java.lang.OutOfMemoryError
,即使它應該懶洋洋地評估。
「類似的東西」,但後者的表達似乎返回100020001元素,而不是50005000.威士忌探戈狐步舞? – Malvolio
@Malvolio感謝您的注意! 'j'應該從'i + 1到10000',而不是'1到10000'。現在修復。 –
D'oh。我應該注意到解決方案,而不僅僅是問題。我盯着地圖函數,忽略了參數.. – Malvolio