Это почти повторение отношения первого порядка, за исключением пола, который запутывает вещи. Если вам не нужно слово,
http://en.wikipedia.org/wiki/Recurrence_relation
Кроме того, не используйте bash.
Incanter предоставляет оболочку для некоторых из Parallel Colt , включая то, что выглядит довольно приличной реализацией быстрых распараллеленных плотных матриц, которые взаимодействуют с библиотеками Clojure на основе seq. Я не использовал его, но это должно быть то, что вы ищете.
Пример .
В настоящее время я использую подход со списком списков в криптовиде , потому что для этого приложения очень важно сохранять ленивость . Я также подумываю о переходе на более эффективный подход, при условии, что он сохранит по крайней мере внешнее представление ленивым.
Я не эксперт, но все же вот мое мнение :)
list-of-lists, вероятно, наиболее естественная идиома Clojure для представления матриц. Эта структура также хорошо подходит для отображения / сокращения видов операций. Clojure также довольно эффективен в обработке последовательностей - вероятно, лучше, чем большинство альтернатив.
Я не могу поклясться в этом, но я думаю, что видел, как Clojure усердно работает с 3 или всеми 4 моими процессорами над программами, которые я написал, которые были функциональными. по стилю, но не пытался быть параллельным. Я подозреваю, что компилятор сам находит некоторые возможности для параллельной обработки.
Я думаю, что типы последовательностей, созданные Clojure, будут работать как списки в Java или, по крайней мере, будут Iterable. Вероятно, этого достаточно для того, что вы хотите, хотя вы можете столкнуться с проблемами, если попытаетесь рассматривать эти структуры как изменяемые в Java.
К спискам лучше всего обращаться последовательно. Если вы планируете много прыгать в матрице, вектор векторов может подойти вам немного лучше с точки зрения производительности. Я подозреваю, что beats использует функцию nth .
Как бывший программист на C, я вкратце подумал, что вы можете реализовать свою матрицу как одномерную структуру (то есть прямую последовательность или, лучше, вектор), и выполните свои собственные вычисления индекса, чтобы найти нужный элемент. Вы можете использовать функцию раздела , чтобы пройти через него ... ну, это можно было бы заставить работать, но я подозреваю, что есть очень веские причины не делать этого.
вектор векторов может подойти вам немного лучше с точки зрения производительности. Я подозреваю, что beats использует функцию nth .Как бывший программист на C, я вкратце подумал, что вы можете реализовать свою матрицу как одномерную структуру (то есть прямую последовательность или, лучше, вектор), и выполните свои собственные вычисления индекса, чтобы найти нужный элемент. Вы можете использовать функцию раздела , чтобы пройти через него ... ну, это можно было бы заставить работать, но я подозреваю, что есть очень веские причины не делать этого.
вектор векторов может подойти вам немного лучше с точки зрения производительности. Я подозреваю, что beats использует функцию nth .Как бывший программист на C, я вкратце подумал, что вы можете реализовать свою матрицу как одномерную структуру (то есть прямую последовательность или, лучше, вектор), и выполните свои собственные вычисления индекса, чтобы найти нужный элемент. Вы можете использовать функцию раздела , чтобы пройти через него ... ну, это можно было бы заставить работать, но я подозреваю, что есть очень веские причины не делать этого.
Clojure Рича Хики - это Лисп на основе JVM, который представляет PersistentVector (не PersistentList) с 32-сторонним деревом.
Если вы хотите написать свой собственный тип матрицы, я бы использовал PersistentVector , в противном случае лучшим выбором было бы использовать Parallel Colt с Incanter.