Хотя я и собирался перейти на J для разминки ума при помощи ProjectEuler, но на Скале мне пока нравится больше. 50я задача, три вечера, между делом:
- в первый, видимо, правильно, но медленно -- слишком сложная рекурсия, хотел все в одну функцию вложить, и она никак не оптимизировалась под хвостовую рекурсию.
- во второй, быстро, но не правильно
- в третий, наконец, и быстро и правильно, разложилось на два очень простых метода в две строчки каждый (генератор простых чисел сюда не входит)
Да, на J это можно написать в три понятные строчки точно, я видел вариант. А значит, и в одну, так как любую J-программу можно "свернуть" в одну емкую (но не всегда понятную) строчку.
P.S. Попутно оказалось, что разные варианты генераторов случайных чисел не являются tail-рекурсивными (в том числе и тот, который в качестве примера приведен в документации Scala класса Stream).
- в первый, видимо, правильно, но медленно -- слишком сложная рекурсия, хотел все в одну функцию вложить, и она никак не оптимизировалась под хвостовую рекурсию.
- во второй, быстро, но не правильно
- в третий, наконец, и быстро и правильно, разложилось на два очень простых метода в две строчки каждый (генератор простых чисел сюда не входит)
Да, на J это можно написать в три понятные строчки точно, я видел вариант. А значит, и в одну, так как любую J-программу можно "свернуть" в одну емкую (но не всегда понятную) строчку.
P.S. Попутно оказалось, что разные варианты генераторов случайных чисел не являются tail-рекурсивными (в том числе и тот, который в качестве примера приведен в документации Scala класса Stream).