Slide 9
Slide 9 text
lib LibRuby
type VALUE = Void*
$rb_cObject : VALUE
fun rb_define_class(name : UInt8*, super : VALUE) : VALUE
fun rb_define_module_function(klass : VALUE, name : UInt8*, func : VALUE, VALUE, VALUE, VALUE -> VALUE, argc : Int32)
fun rb_num2int(value : VALUE) : Int32
fun rb_int2inum(value : Int32) : VALUE
end
def tarai(self : LibRuby::VALUE, x : LibRuby::VALUE, y : LibRuby::VALUE, z : LibRuby::VALUE)
int_x = LibRuby.rb_num2int(x)
int_y = LibRuby.rb_num2int(y)
int_z = LibRuby.rb_num2int(z)
LibRuby.rb_int2inum(tarai2(int_x, int_y, int_z))
end
def tarai2(x, y, z)
if y < x
tarai2(
tarai2(x - 1, y, z),
tarai2(y - 1, z, x),
tarai2(z - 1, x, y)
)
else
y
end
end
fun init = Init_extension_with_crystal
GC.init
LibCrystalMain.__crystal_main(0, Pointer(Pointer(UInt8)).null)
rb_class_takeuchi = LibRuby.rb_define_class("TakeuchiCr", LibRuby.rb_cObject)
LibRuby.rb_define_module_function(rb_class_takeuchi, "tarai", ->tarai, 3);
end
&YBNQMF5BLFVDIJ$SUBSBJ