Как стать автором
Обновить

Комментарии 5

Простите, а где в этом примере для вычисления скользящего среднего -

функции высшего порядка и неизменяемые структуры данных:

# функция для вычисления скользящего среднего
function moving_average(data, window_size)
    len = length(data)
    result = []

    for i in 1:(len - window_size + 1)
        window = data[i:(i + window_size - 1)]
        push!(result, sum(window) / window_size)
    end

    return result
end

Я их тут не вижу. Что я вижу - это плохо написанный код (result c типом элементов Any и копирование массива для каждой позиции окна).

Может быть, Вы хотели сделать аналог map с произвольной функцией по окну, как в пакете RollingFunctions.jl? Или просто чат-бот дал сбой?)

Я их тут не вижу.

Странно, я вижу.

Что я вижу - это плохо написанный код

Это оптическая иллюзия. Или менее политкорректно - возмущения в калашном ряду под действием свиного рыла.

Увидел Any - пиши что плохо. Рабочий подход, только вместо «плохо» некоторые прочитают «дурак». Потому что Any в Джулии существует не просто так и не как легаси и не есть ошибка, в отличии от других «массовых» языков программирования направленных на удешевление разработки (низкокачественного) софта. Кроме того, нужно точно знать что и почему делаешь чтобы менять тип выходного значения вместе с типом входного, и того лучше это знать чтобы менять только тип выходного значения.

Джулия - не язык промышленной разработки приложений. Было бы иначе - да, можно было бы сказать что нужно было разобраться и от Any уйти. Но нет.

Увидел копирование - пиши что плохо, см. выше. И не только из-за сомнений во владении понятием «преждевременная оптимизация». Но и потому, что не всегда известно не придётся ли потом менять «оптимизированный» код обратно на копирование.

То, что до Джулии ещё не доросла раковая опухоль коммерциализации, проявляется ещё и в том, что не знать - это нормально, а не провал на этапе составления спецификаций. Поэтому и критерии качества - иные, а если джунов сеньоров тестеров это бесит, за нехваткой стоицизма для принятия реальности и мест в ней, то прошу не стесняться минусовать карму (это не плацебо, но вдруг тоже поможет).

Странно, я вижу.

Ну так покажите пальцем, где оно там есть)

По остальному Вашему комментарию - Вы вольны читать как угодно, но это не меняет того, что написано. Я не опускаюсь до оскорблений, а всего лишь высказываю свою субъективную оценку, и даю её обоснование (почему плохо). Не знать - нормально.

Ваши пространные рассуждения про Any - хорошо бы подкрепить, как именно они связаны с конкретным фрагментом кода? Иначе я не вижу предмета обсуждений.

Больше практических инструментов, вы можете изучить в рамках онлайн-курсов от практикующих экспертов. 

Ну да, реклама курсов как в прошлый раз, или опять, или снова. Как рекламу оценивать не буду, не понимаю я чаяний на курсы ходоков. А как сказка про Джулию - этот выпуск понравился больше предыдущего, на набор случайных фактов похоже намного меньше.

Простой рекурсивный пример – функция для вычисления факториала числа:

.......

При больших значениях n такой подход может привести к переполнению стека.

Я бы написал "при достаточно больших", а то кому жемчуг мелкий, а кому...

Как я Джулию заметил, так сразу и выполнил

function f(n)
    if n < 3
        return BigInt(1), BigInt(1)
    end
    p = f(n-1)
    p[1] + p[2], p[1]
end

function ft(n)
    v = "$(f(n)[1])"
    print("$n: $(length(v))\n$v\n")
end

@time ft(55_000)

и за 0.3 секунды на неторопливой машине для баловства получил 11494 знака числа Фибоначчи номер 55,000. С номером 60,000 - как предупреждают в статье. Для сравнения, на Python облом уже на 1,000.

Эээ...

Надеюсь я помог продать Джулию в playmates, а с тем и курсы монетизировать.

# bind для монады Maybe
function bind(m::Maybe, f)
if isnothing(m.value)

return failure()

else
return f(m.value)
end

Подскажите, пожалуйста, разве bind не должна иметь тип Maybe -> f -> Maybe?
Я имею в виду, что должно быть
...
else
return success(f(m.value))

Зарегистрируйтесь на Хабре, чтобы оставить комментарий