Ruby1.9 のラムダさん 2 (SKI とチャーチ数 256)
#!ruby1.9 -v
s = -> x {-> y {-> z { x.(z).(y.(z)) } } }
k = -> x {-> y { x } }
i = -> x { x }
t = k
f = s.(k)
car = -> list { list.(t) }
cdr = -> list { list.(f) }
car = s.(i).(k.(t))
cdr = s.(i).(k.(f))
# ((lambda (n) (n n)) ((lambda (n) (n n)) (lambda (f x) (f (f x)))))
cn256 = -> n { n.(n) }.(-> n { n.(n) }.(-> f {-> x { f.(f.(x))}}))
# SII(SII(S(S(KS)K)I))
cn256 = s.(i).(i).(s.(i).(i).(s.(s.(k.(s)).(k)).(i)))
inputlist = -> list {
-> f { f.(list.first || cn256).(inputlist.(list.drop(1))) }
}
cn2num = -> cn { cn.(-> x { x + 1 }).(0) }
num2cn = -> n { -> f {-> x { (1..n).reduce(x) {|r,_| f.(r) } } } }
il = inputlist.([72, 101, 108, 108, 111].map(&num2cn))
p cn2num.(cn256)
p cn2num.(car.(il))
p cn2num.(car.(cdr.(il)))Ruby のコードに見えないすぎるw