#!/usr/bin/ruby

func compose(f,g) {
    func (*args) {
        f(g(args...));
    }
}

var cube  = func(a) { a.pow(3) };
var croot = func(a) { a.root(3) };

var flist1 = [Number.method(:sin),  Number.method(:cos),   cube];
var flist2 = [Number.method(:asin), Number.method(:acos), croot];

flist1.range.each { |i|
    say compose(flist1[i], flist2[i])(0.5);
}