simont |
Mon 2013-07-15 16:36 |
any language with first-class functions will do something much simpler than this
Indeed, it's simpler and hence less flexible. Both those examples are more or less fixed in form at compile time; you get to plug in some implicit parameters (e.g. capturing variables from the defining scope) but you can't change the number of statements in the function, as I demonstrated in my half-baked polynomial example above. I don't know C# well at all, but I know that in JS you'd only be able to do my polynomial example by building the function source up in a string and doing an eval.
(OK, I suppose you can build one up in JS by composing smaller functions, along the lines ofvar poly = function(x) { return 0; }
for (i = ncoeffs; i-- > 0 ;) {
builder = function(p, coeff) {
return function(x) { return x*p(x)+coeff; };
};
poly = builder(poly, coeffs[i]);
}but I've no confidence that running it wouldn't still end up with n function call overheads every time a degree-n polynomial was evaluated. Also, I had to try several times to get the recursion to do the right thing in terms of capturing everything by value rather than reference, so even if that does turn out to work efficiently it still fails the puzzle-game test.) |
|