豊福です。

> ramanujan(proc{|v| v[0]**3 + v[1]**3}).take(2).each do |x|
>   p x
> end
> と解を2個書かせると2個目を書いた後終了するまでかなり時間が
> かかります。2個目を書いた後も tail.take(0) などを実行するの
> はわかりますがそんなに時間かかるものでしょうか。

  tail で次の解が見つかってから take(0) が実行されるんですね。
結局解2個求めるのに解3個生成していたのでした。
ここにも遅延評価の問題が出てくるのですね。

>> >p take 10,filter(zip(fsort(1),cdr(fsort(1)))){|x|  f(x[0]) == f(x[1]) }
>> > 実行は、非常に効率が悪いので、全然終わらないんですが ^^;
>> 
>> あれ、こっちでは一つも出力がない。Ruby のバグ?

  手元のマシンで take 1 したら40秒かかりましたが答えは出ました。

>>> # 0,1,2,3,... で、偶数のものを最初から 10個選べ
>>> p take(10,filter(inflist(0){|x| x+1}){|x| x % 2 == 0})

もやってみたんですが filter の中の
  [car(lst),lambda{filter cdr(lst),&proc}]
の行で
in `proc': tried to create Proc object without a block (ArgumentError)
というエラーになりました。ruby のバージョンの違い?
---
                        豊福
                        ttoyofukujp / yahoo.co.jp