stanc3
stanc3 copied to clipboard
[FR] UDFs taking another UDF as argument
A bit of a nice-to-have for simplifying more complex models would be the ability to pass a functions as an argument to another function.
With suggested signatures like:
functions {
real mult(int x, real y) { return x * y; }
real div(int x, real y) { return x / y; }
real calc((int, real): real functor, int x, real y) {
return functor(x, y);
}
}
And usage:
int a = 1;
real b = 2;
real calc_mult = calc(mult, a, b);
real calc_div = calc(div, a, b);
And if it's not too tricky an additional request, being able to declare/assign functions would be great as well:
(int, real): real functor;
if (operation == 1) {
functor = mult;
} else {
functor = div;
}
real result = calc(functor, a, b);
Note that the above is a highly contrived and simplified example
I think this is definitely something we want to work on after Tuples. Some of this was part of #742 if I understand correctly, so reviving or reworking that effort would be a good start down the line
See also: https://github.com/stan-dev/design-docs/blob/master/designs/0004-closures-fun-types.md