Комментарии 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))
Кратко про FP в Julia