Превращение кода Java в быстрый код Clojure

Можно ли этот код Java транслировать в код Clojure, который работает так же быстро или почти так же быстро?

Я ' Мне удалось получить более простые функции, такие как добавление двух массивов для работы на разумных скоростях с подсказкой типов, но я не мог заставить Clojure делать то, что делают нижеприведенные функции, за разумное время, используя либо взаимодействие Java, либо матрицы 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;
}
8
задан 2daaa 27 September 2010 в 20:24
поделиться