豊福です。

 >> def fsort(f, k)
 >>   List([k, k]){fmerge(f, integers(k+1).map{|b| [k, b]}, fsort(f, k+1))}
 >> end
 > 
 >   この fsort は「f([x,y]) は x と y に関して単調増加」を
 > 想定しているんですよね。

   「x と y が対称」というのも入ってました。対称でないときは

def fsort(f, k)
   List([k, k]){fmerge3(f, integers(k+1).map{|b| [k, b]},
     integers(k+1).map{|b| [b, k]}, fsort(f, k+1))}
end

でいけそうです。

 >> いままで役に立つ例として、エラストテネスのふるいしか無かったの
 >> だけど、ひとつ増えてうれしいです。
 > 
 >   ゴールドバッハの問題なんか List 使って書けないでしょうか。

   書いてみました。効率悪いですが。

class List
   ...
   def nth(n)
     if n == 0
       head
     else
       tail.nth(n-1)
     end
   end
end

...

def prime(n)
   sieve(integers(2)).nth(n)
end

def goldbach(f)
   fsort(f, 1)
end

goldbach(proc{|v| prime(v[0]) + prime(v[1])}).take(100).each do |x|
   a = prime(x[0]); b = prime(x[1])
   p [a+b, [a, b]]
end
---
                         豊福
                         ttoyofukujp / yahoo.co.jp