Решил поиграться с J на КПК. Сравнить его в числомолотильной задачи с C#. Задачу взял влоб самую простую какую только смог придумать. Просуммировать числа от 0 до 10^7
M>Хоть считает. Уже хорошо. Но при подсчете суммы для 10^8 процесс скромно съедает 440 Мб памяти.
Продолжил игры.
НАписал простенький глагол
summ =: monad : 0
counter =. 0
sum =. 0
while. counter <: y.
do. sum =. sum + counter
counter =. counter +1.
end.
sum
)
Он работает как и положено. Память не кушает. НО
NB. Это вычисление работает около минуты
summ 10^7
NB. А это отрабатывает меньше чем за секунду, особого потребления памяти не видно
+/ i.10^7
NB. Вычисления этого я не дождался, прервал после минут 10 работы
summ 10^7
NB. А это вычислилось за 10 секунд, хоть и скушало 440 Мб памяти, как я уже говорил
+/ i.10^8
Из чего можно сделать вывод что аут оф мемори это скорее фича чем бага. J использует какой-то хитрый алгоритм для суммирования. Интересно какой. Есть у кого-то доки, идеи ?
"Если Вы отличаетесь от меня, то это ничуть мне не вредит — Вы делаете меня богаче". Экзюпери
Re[2]: [J] О суммировании чисел и хвостовой рекурсии
Здравствуйте, Mirrorer, Вы писали:
M>Из чего можно сделать вывод что аут оф мемори это скорее фича чем бага. J использует какой-то хитрый алгоритм для суммирования. Интересно какой. Есть у кого-то доки, идеи ?
Что там хитрого? i.10^7 создаёт массив, +/ его суммирует.
Re[3]: [J] О суммировании чисел и хвостовой рекурсии
Здравствуйте, Трурль, Вы писали:
Т>Что там хитрого? i.10^7 создаёт массив, +/ его суммирует.
А почему такое суммирование получается быстее чем циклом влоб ?
"Если Вы отличаетесь от меня, то это ничуть мне не вредит — Вы делаете меня богаче". Экзюпери
Re[4]: [J] О суммировании чисел и хвостовой рекурсии
Здравствуйте, Трурль, Вы писали:
Т>Здравствуйте, Кодт, Вы писали:
К>>А у J не хватает мозгов сделать fusion этих функций?
Т>А у кого хватает? Т>Интерпретатор просто распознаёт некоторые шаблоны, но +/ i. к ним не относится.
А что относится?
Re[6]: [J] О суммировании чисел и хвостовой рекурсии