トップ «前の日記(2009-03-08) 最新 次の日記(2009-03-25)» 月表示 編集

日々の流転


2009-03-16 [長年日記]

λ. 部分継続でDelegateMap

ku-ma-meさんの map が面倒なので DelegateMap を読んで、なんか部分継続(delimited continuation, 限定継続)っぽいなと思ったので、shift/resetで書いてみた。 (shift/reset自体の実装については、call/ccによるshift/resetの表現 - ヒビルテ(2003-05-03)まめめも(2008-04-17) を参照のこと)

module Enumerable
  def dmap2
    # Object.__fcall__(:shift) {|k| map {|e| k[e] } }
    Object.__send__(:shift) {|k| map {|e| k[e] } }
  end
end

p reset { 1 + [1, 2, 3].dmap2 }
#=> [2,3,4]

p reset { 1 + [[1,2], [2,3], [3,4]].dmap2.dmap2 }
#=> [[2, 3], [3, 4], [4, 5]]

まあ、自然言語の「任意の」とかの量化子はまさにこんな感じなので、当たり前といえば当たり前な感じだけど。 参考: “Continuations in Natural Language” by Chris Barker - ヒビルテ (2008-03-13)