use std, math let my_asin = new Function (.::. -> real {asin x}) let my__sin = new Function (.::. -> real { sin x}) let sinasin = my__sin o my_asin print sin asin 0.5 print *my__sin 0.0 print *sinasin 0.5 ~my_asin ~my__sin ~sinasin =: o := -> Function {compose f g} .:compose :. -> Function use array let d = (new array of 2 Function) (d[0]) = f ; (d[1]) = g let c = new Function (.::. -> real { *fg[0]( *fg[1](x) ) }) (d) c.del = .::.{free any} c class Function function(any)(real)->(real) func any data function(any) del =: * := -> real Cgen "(*("(f.func)"))("(f.data)", "(x)")" .: del Function :. unless f.del is nil call f.del with f.data free f =: ~ := {del Function f} .: new Function real func> ():. -> Function let f = new Function f.func = func f.data = data f