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 = [Num.method(:sin), Num.method(:cos), cube] var flist2 = [Num.method(:asin), Num.method(:acos), croot] for a,b (flist1 ~Z flist2) { say compose(a, b)(0.5) }