Size: a a a

Язык программирования Julia / Julia programming language

2020 April 25

АО

Андрей Оськин in Язык программирования Julia / Julia programming language
Вот это мне кажется подойдёт: https://juliacollections.github.io/IterTools.jl/latest/#iterated(f,-x)-1
источник

RS

Roman Samarev in Язык программирования Julia / Julia programming language
источник

АО

Андрей Оськин in Язык программирования Julia / Julia programming language
Ну да, надо замерять.

Но товарищ измерял при помощи @time, что немного дискредитирует результаты его вычислений.
источник

RS

Roman Samarev in Язык программирования Julia / Julia programming language
вот что интересно, есть ли у Julia встроенный оптимизатор хотя бы на хвостовую рекурсию….
источник

АО

Андрей Оськин in Язык программирования Julia / Julia programming language
Плюс, надо смотреть, где именно bottleneck находится. В одном случае он делает append, в другом собирает с помощью list comprehension
источник

АО

Андрей Оськин in Язык программирования Julia / Julia programming language
Хвостовой рекурсии в Julia точно нет.
источник

АО

Андрей Оськин in Язык программирования Julia / Julia programming language
https://github.com/JuliaLang/julia/issues/4964

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

🐙

🐙 in Язык программирования Julia / Julia programming language
Спасибо, оно. Не хотел самописную везде таскать.
источник

ВФ

Виктор Федоров in Язык программирования Julia / Julia programming language
🐙
Привет всем. Подскажите, есть ли изящные варианты с использованием возможностей julia синтаксиса передавать результат выполнения функции a самой себе n раз? что-то с функционалом:
(a∘a∘ ... n раз ... ∘a)(начальный аргумент)
либо
начальный аргумент |> a |>a ... n раз |>a
Если n большое, то можно для Function переопределить ^ а-ля быстрое возведение в степень
источник

ВФ

Виктор Федоров in Язык программирования Julia / Julia programming language
И потом писать (a^n)(x)
источник

АО

Андрей Оськин in Язык программирования Julia / Julia programming language
👍
источник
2020 April 26

VK

Valto Kyynäräinen in Язык программирования Julia / Julia programming language
🙋‍♂
источник

АО

Андрей Оськин in Язык программирования Julia / Julia programming language
🐙
Привет всем. Подскажите, есть ли изящные варианты с использованием возможностей julia синтаксиса передавать результат выполнения функции a самой себе n раз? что-то с функционалом:
(a∘a∘ ... n раз ... ∘a)(начальный аргумент)
либо
начальный аргумент |> a |>a ... n раз |>a
Есть кстати абсолютно ужасный вариант, но зато забавный

macro fn(n, ex)
   func = ex.args[1]
   res = ex
   for i in 1:(n - 1)
       res = Expr(:call, func, res)
   end

   return quote
       $(esc(res))
   end
end

f(x) = 2x

@fn 10 f(5) # 5120

@macroexpand @fn 10 f(5)
quote
   f(f(f(f(f(f(f(f(f(f(5))))))))))
end
источник

АО

Андрей Оськин in Язык программирования Julia / Julia programming language
Можно этот макрос конечно до ума довести, но вообще, по этому пути рекомендуется идти только от отчаяния.
источник

АО

Андрей Оськин in Язык программирования Julia / Julia programming language
Есть например вот такой подвох
@fn 1000 sin(1)
0.05459297151018517

@fn 10_000 sin(1)
ERROR: syntax: invalid syntax (memory-error out of gc handles)
Stacktrace:
[1] top-level scope at none:0
источник

АО

Андрей Оськин in Язык программирования Julia / Julia programming language
Но крутит конечно быстро, минимальный оверхед
@btime @fn 1000 sin(1)
 9.495 μs (0 allocations: 0 bytes)
источник

АО

Андрей Оськин in Язык программирования Julia / Julia programming language
Вариант с IterTools конечно помедленнее
@btime let res
   cnt = 0
   for outer res in iterated(sin, 1)
       cnt == 1000 && break
       cnt += 1
   end
end

26.827 μs (2001 allocations: 46.91 KiB)
источник
2020 April 27

ВФ

Виктор Федоров in Язык программирования Julia / Julia programming language
Есть ещё вариант

an=reduce(°, (a for k in 1:n-1); init = a)

an(x)
источник

ВФ

Виктор Федоров in Язык программирования Julia / Julia programming language
Это если n=1,2,...
A ecли допускать также n=0, то надо так

reduce(°, (a for k in 1:n); init = x->x)
источник

ВФ

Виктор Федоров in Язык программирования Julia / Julia programming language
Привет от индуктивных функций на последовательностях по А.Г.Кушниренко
источник