Size: a a a

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

2021 June 15

АО

Андрей Оськин... in Язык программирования Julia / Julia programming language
Рекомендую воспользоваться PkgTemplates.jl, там сразу скелет будет достаточно хороший.
источник

P

PS in Язык программирования Julia / Julia programming language
Занятный хак вышел с публикацией. Не ожидал, что так просто. Впрочем, этот файлик можно скачать и просмотреть просто в браузере.

https://elgator.github.io/FinancialReportModel/FinancialReportModel.jl.html
источник

АО

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

АО

Андрей Оськин... in Язык программирования Julia / Julia programming language
# TODO get rid of global. eval() works only for global context
источник

АО

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

АО

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

P

PS in Язык программирования Julia / Julia programming language
Потому что формулы как-то надо вычислять. Кроме eval не знаю как
источник

АО

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

P

PS in Язык программирования Julia / Julia programming language
сейчас да. произвольный julia код Ж) Что тоже слегка страшно
источник

АО

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

Но вообще, если это julia код, то лучше просто через higher order function передавать.
источник

АО

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

P

PS in Язык программирования Julia / Julia programming language
Не знаю, строкой, кодом julia, куском AST. Что я хочу — чтобы для модельера был понятный и не слишком развесистый синтаксис определения модели
источник

АО

Андрей Оськин... in Язык программирования Julia / Julia programming language
Можно идти по пути JuMP какого-нибудь. Создать структуры Cell, разрешить над ними различные математические операции.  А в нужный момент их материализовать.

Внутри тогда конечно надо будет своё собственное дерево хранить.
источник

АО

Андрей Оськин... in Язык программирования Julia / Julia programming language
Можно ещё GLM или какой-то похожий пакет посмотреть. Был точно кто-то, кто позволял в R стиле формулы для линейной регрессии задавать.
источник

P

PS in Язык программирования Julia / Julia programming language
кстати! про регрессии я забыл. у JuMP смотрел исходники
источник

AP

Alexander Plavin in Язык программирования Julia / Julia programming language
я глубоко не вник в код, но кажется что можно достаточно просто заметить эти все eval'ы на передачу функций
например, вместо Meta.parse("model1[:a][1]*4") будет m -> m.a[1] * 4, и т.п.
источник

АО

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

АО

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

AP

Alexander Plavin in Язык программирования Julia / Julia programming language
так же c rules:
вместо set_rules!(model1, "model1", [:a => ":a[-1]+1", :b => ":a[+0]*3"])
будет set_rules!(model1, "model1", [m -> m.a[-1] + 1, m -> m.a[+0] * 3])
источник

AP

Alexander Plavin in Язык программирования Julia / Julia programming language
ну или даже с более стандартным порядком передачи аргументов и DataPipes :)
@p begin
   model1
   set_rule!(_.a[-1] + 1)
   set_rule!(_.a[+0] * 3)
end
источник