Julia の 無名関数をつなげて使う
Juliaで無名関数が使える
input
fnc = x -> x + 2 fnc(2)
output
4
無名関数をつなげて使う
この無名関数を連続して使うことができる. これが僕にとっては変な感じだった(たぶん無名関数を良く理解していないせい).
例えば
function f(x) x = 2x x += 5 end
みたいに「2倍して5足される」という関数を無名関数で次のように書くことができる.
gx = x -> (y -> y+5)(2x) gx(3)
output
11
これで良いのか…
gxという関数は x を引数でとって 一番後ろの (2x) で2倍されて, それが y へ入って 5足される という感じみたい
処理は↑この画像の矢印の流れで行われるっぽい.
例 RungeKutta
この無名関数の書き方を使ってRungeKuttaを書くと
function rk4(f) return (t,y,dt)-> ( (dy1 )-> ( (dy2 )-> ( (dy3 )-> ( (dy4 )->( dy1 + 2*dy2 + 2*dy3 + dy4 ) / 6 )( dt * f( t +dt , y + dy3 ) ) )( dt * f( t +dt/2, y + dy2/2 ) ) )( dt * f( t +dt/2, y + dy1/2 ) ) )( dt * f( t , y ) ) end
こうなるらしい.
出典
Runge-Kutta method - Rosetta Code このサイト色々な言語でRungeKutta書いていて面白い.
最初何がなんだかわからなかったが, まあ理解すればすんなりわかった.
しかしパッと見でわからないから可読性が高いとは言えない気もする.