with arbitrary number of arguments.
It's really inconvenient, but possible, because most evals have access to global variables (and some even to local scope variables). So you do something like this:
getFunctionValue(string f, real x[], real a[]) {
idx = 0;
foreach anX in x {
eval("x" . idx . " = " . x);
}
idx = 0;
foreach anA in a {
eval("a" . idx . " = " . a);
}
return eval(f);
}
And then you build your "f"s so that they use x0, x1 and so on for argument names, and a0, a1 and so forth for parameter names.
And then you can look for minimum sum of squares by calling getFunctionValue in the known data points x[] and varying a[].
And then you throw up in disgust at this slow unvieldy buggy contraption and choose a language that supports real anonymous functions. You do. But not Bryce. He is happy. He has just achieved another triumph of Eval.