Ruby で Church 数を書いてみた
投稿者 okkez
今日は 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


