Ruby で Church 数を書いてみた

投稿者 okkez 2008-12-13 15:00:00 GMT

今日は SICP 読書会だったので復習がてら Ruby で書いてみた。 分かってしまえば簡単に書けた。

zero = lambda{|f|
  lambda{|x| x }
}
one = lambda{|f|
  lambda{|x|
    f.call(x)
  }
}
two = lambda{|f|
  lambda{|x|
    f.call(f.call(x))
  }
}
three = lambda{|f|
  lambda{|x|
    f.call(f.call(f.call(x)))
  }
}

p zero.call(lambda{|x| x + 1 }).call(0) # => 0
p one.call(lambda{|x| x + 1 }).call(0) # => 1
p two.call(lambda{|x| x + 1 }).call(0) # => 2
p three.call(lambda{|x| x + 1 }).call(0) # => 3

add = lambda{|a, b|
  lambda{|f|
    lambda{|x|
      a.call(f).call(b.call(f).call(x))
    }
  }
}

p add.call(two, three).call(lambda{|x| x + 1 }).call(0) # => 5

カテゴリ  | タグ  | コメントなし | トラックバックなし

コメント

トラックバック

トラックバックリンク:
http://typo.okkez.net/trackbacks?article_id=224

コメントは許可されていません