Может ли этот Java-код быть переведен в код Clojure, который такой же быстрый или почти такой же быстрый?
Мне удалось получить более простые функции, такие как добавление двух массивов для работы на разумных скоростях с подсказкой типов, но я не мог заставить Clojure делать то, что перечисленные ниже функции вообще, за разумное времяиспользуя Java Interop или матрицы Incanter и используя либо функциональные, либо императивные стили.
Я что-то упускаю из-за подсказок по типу или лучше всего делать такие вещи в Java?
static double[][] grad2_stencil= { {0,0,-1,0,0},
{0,0,16,0,0},
{-1,16,-60,16,-1},
{0,0,16,0,0},
{0,0,-1,0,0} };
public static double grad2(double[][] array, int x, int y){
double temp=0;
int L=array.length;
for(int i=0; i<5; i++){
for(int j=0; j<5; j++){
temp+=array[((x+i-2)%L+L)%L][((y+j-2)%L+L)%L]*grad2_stencil[i][j];
}
}
return temp/12.0;
}
public static double[][] grad2_field(double[][] arr){
int L=arr.length;
double[][] result=new double[L][L];
for(int i=0; i<L; i++){
for(int j=0; j<L; j++){
result[i][j]=grad2(arr, i, j);
}
}
return result;
}