0

仮定:

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

補足として、これがフリーズすると、割り込みスクリプトが機能しません。その理由を知っている人はいますか?

4

1 に答える 1

1

修正をチェックインしました。

問題は funlistOutTake(2) の動作方法にありました。最後の (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

遅延評価された 'res' リストの 3 番目の要素を取得するために、2 番目のフィルター: filter(SMALLER(20)) は、最終的に 3 番目の数値 (>19) が見つかることを期待して、永久に呼び出されるため、機能する可能性はありません。最初のフィルターによって評価されます。

take(n) にも同じ問題があり、修正する必要があることに注意してください。

于 2014-05-12T01:02:19.807 に答える