2014-05-09 21 views
0

假設:fpiglet採取無限名單凍結

import static fpig.common.functions.FromOperators.* 
import static fpig.groovylist.asfunlist.functions.InAndOutOfFunLists.* 
import static fpig.funlist.functions.BaseFL.* 
import static fpig.funlist.functions.Infinity.* 

我不明白爲什麼這個工程:

def res= filter{it%7==0} << filter(SMALLER(20)) << naturalNumbers() 
funlistOutTake(1) << res 

和這個作品:

def res= filter{it%7==0} << filter(SMALLER(50)) << naturalNumbers() 
funlistOutTake(2) << res 

但這凍結:

def res= filter{it%7==0} << filter(SMALLER(20)) << naturalNumbers() 
funlistOutTake(2) << res 

我使用這個Groovy的控制檯和fpiglet 0.0.1-SNAPSHOT

作爲一個方面說明,當這種凍結,中斷腳本不工作,沒有人知道爲什麼嗎?

回答

1

我檢查了一個修復程序。

問題出在funlistOutTake(2)如何工作。它想要評估最後(第二個)記錄中懶惰列表的尾部。換句話說,此代碼:

def res= filter{it%7==0} << naturalNumbers() 
funlistOutTake(2) << res 

會評估所有自然數高達21

剛(明顯)側面說明:

def res= filter{it%7==0} << filter(SMALLER(20)) << naturalNumbers() 
funlistOutTake(3) << res 

沒有工作,因爲得到的機會第二個過濾器:過濾器(SMALLER(20))最終被永遠調用,希望最終能夠找到第三個數字(> 19),這個數字可以被第一個過濾器評估。

注意,採取(n)有同樣的問題,現在應該是固定的。