動機
関数電卓をコマンドラインで出来たらいいなと思った,ありきたりな動機
やっていく
下記をfunc_calc.jl
として保存
今回は小文字アルファベット全部をシンボル扱いする
using Fire using SymEngine # シンボル扱いする文字の定義,書き方 1/3 a=symbols(:a); b=symbols(:b) # シンボル扱いする文字の定義,書き方 2/3 c,d = symbols("c d") # シンボル扱いする文字の定義, 書き方 3/3 @vars e f g h i j k l m n o p q r s t u v w x y z "微分する,Argument type Basic is not supported by Fire.jlらしいのでString受取してタイプ変換" @main function diff_func(f::String, respect_to::String) f = Basic(f) respect_to = Basic(respect_to) result = diff(f,respect_to) println(f,"を",respect_to,"で1回微分すると:",result) end "代入,この文章はjulia func_calc.jl subsitution --helpで見れる" @main function subsitution(f::String,respect_to::String,num::Float64) f = Basic(f) respect_to = Basic(respect_to) result = subs(f,respect_to=>num) println(f,"において",respect_to,"に",num,"を代入すると:",result) end
動作確認
:~ $ julia func_calc.jl diff_func 5*x^3+6*x^2+2x+1 x 1 + 2*x + 6*x^2 + 5*x^3をxで1回微分すると:2 + 12*x + 15*x^2 :~ $ julia func_calc.jl diff_func 5*x^3+6*x^2+2x+1 y 1 + 2*x + 6*x^2 + 5*x^3をyで1回微分すると:0
代入
:~ $ julia func_calc.jl subsitution x^2+x+1 x 3 1 + x + x^2においてxに3.0を代入すると:13.0
感想など
Fire.jlでそのまま受け取れると思ったので少し詰まった(typeof()で見ていって解決)
参考URL等
Fire.jl
GitHub - ylxdzsw/Fire.jl: Fire.jl is a library for automatically generating command line interfaces (CLIs) for julia functions.
Fire.jlはgoogleのpython-fire↓にインスパイヤされたらしい
GitHub - google/python-fire: Python Fire is a library for automatically generating command line interfaces (CLIs) from absolutely any Python object.
SymEngine.jl C++のSymEngineというライブラリのJuliaラッパー
GitHub - symengine/SymEngine.jl: Julia wrappers of SymEngine
Sympy.jl,SymEngine.jl,Reduce.jlで一番スター数が多いのがSymEngine.jl
SymPy.jl vs SymEngine.jl vs Reduce.jl vs - Usage - JuliaLang