math icon indicating copy to clipboard operation
math copied to clipboard

Add "array[] int, int" signature to infix operators + and -

Open paul-buerkner opened this issue 1 year ago • 2 comments
trafficstars

Description

When I try to add an array of integers and a single integer, I get the error:

Ill-typed arguments supplied to infix operator +. Available signatures: 
...
Instead supplied arguments of incompatible type: array[] int, int.

Is there a specific reason we don't have an array[] int, int signature for + and -?

Example

The following Stan code snippet will results in an error, but would be a well defined (vectorized) opteration I believe.

data {
  int N;
  array[N] int J;
}
transformed data {
  array[N] int K = J + N;
}

paul-buerkner avatar Sep 18 '24 13:09 paul-buerkner

Is there a specific reason we don't have an array[] int, int signature for + and -?

Strictly speaking, a Stan array is a container and we've gone with the definition that a Stan array doesn't have mathematical operations. (Adding two arrays doesn't work, adding an array and anything else doesn't work, etc.)

That said, this might not be the right interpretation of the language now.

@SteveBronder / @WardBrian: is this allowed in the language now? Any reason we wouldn't want to allow it?

Would we get into any trouble if we did allow it in the C++?

syclik avatar Nov 09 '24 02:11 syclik

There’s really no reason we couldn’t do it, but it would be almost exactly the same as this user defined function (as in, not any faster, just syntax for basically the same code under the hood)

array[] int add(array[] x, array[] y){
  int N = size(x);
  if(N != size(y))
    reject(“sizes mismatch”)
  array[N] result;
  for (i in 1:N)
    result[i] = x[i] + y[i];

  return result;
}

WardBrian avatar Nov 09 '24 02:11 WardBrian