なんでもできるぞー
チャーチ数を使って計算してみるテスト。810バイト。全然縮んでない。
チャーチ数を使うと、掛け算が簡単だ。べき乗はさらに簡単だ。
169とか251とか重要な数値が簡単に作れるぞー。頑張れば縮むと思うんだけどなあ。なんつーかかっこいいし
require 'compile.rb' compile do let.x2 = abs f, x do f(f(x)) end let.x4 = x2(x2) let.x3 = abs f, x do f(x2(f,x)) end let.x12 = abs f do x3(x4(f)) end # 13 = 3*4+1 let.x13 = abs f, x do f(x3(x4(f),x)) end # 39 = 3*13 = 'H'-'!' let.x39 = abs f, x do x3(x13(f),x) end # 169 = 13^2 = ' ' let.x169 = x2(x13) # 251 = 169*3 = 'r' let.x251 = abs f do x3(x169(f)) end # 170 = 169+1 = '!' let.x170 = abs f, x do f(x169(f,x)) end # 237 = 12*169+1 = 'd' let.x237 = abs f, x do f(x12(x169(f),x)) end # 253 = 251+2 let.x253 = abs f, x do f(f(x251(f,x))) end let.calc = abs f, x do f(succ,x) end let.calc119 = abs f do calc(f, ch119) end let.mout = abs x do out(x) end let.tail = abs ch_ban, ch_d, ch_r, ch_o, ch_l, ch_sp do mout(ch_sp) mout(ch119) mout(ch_o) mout(ch_r) mout(ch_l) mout(ch_d) mout(ch_ban) end let.cout = abs f, x do mout(calc(f,x)) end let.cout119 = abs f do mout(calc119(f)) end let.ch_ban = calc119(x170) let.tail2 = tail(ch_ban) cout(x39, ch_ban) let.ch_d = calc119(x237) let.tail3 = tail2(ch_d) mout(succ(ch_d)) let.ch_r = calc119(x251) let.tail4 = tail3(ch_r) let.ch_o = calc(x253, ch_r) let.tail5 = tail4(ch_o) let.ch_l = mout(cout(x253, ch_o)) let.tail6 = tail5(ch_l) mout(ch_o) let.ch_sp = calc119(x169) cout(x12, ch_sp) tail6(ch_sp) end