メタプログラミングを使用して方程式のシステムの残差を計算する関数を作成しようとしています。メタプログラミングを使用する方程式のシステム
これは私がこれまでに(おもちゃの一例)を試してみましたものです:
function syst!(x::Vector, ou::Vector)
for i in 1:length(x)
eval(parse("ou[$i] = x[$i]^2 + x[$i]"))
end
return ou
end
しかし、私は関数を計算しようとすると、ジュリアは、変数x
が定義されていないことを言います。しかし、println(parse("ou[$i] = x[$i]^2 + x[$i]"))
を含めると、関数の本体に「型付き」されるコードがあります(申し訳ありませんが、正しい技術的なCS用語を使用していない場合、私は「科学的文化」から来ています)。
とにかく、parse
ed x
は別の範囲に住んでいるようです。どのように私はそれがsyst!
の引数からx
を表すように、解析されたx
を関数のスコープに持っていくことができますか?
ボーナス:私は700式のシステムを持っており、メタプログラミングを使用して「型指定」されやすいですが、システムの残差を計算する関数を作成するにはどうすればよいでしょうか?私は正しい方向にいたのですか?
プレアルファ段階ですが、新しいパッケージDolang.jlはこれを行うことを目的としています。主なAPIのポイントは、いくつかのJulia式、許可された変数、その他の関数パラメータを取り、関数を出力する 'make_method'関数です。私が参照している方法は[ここ]です(https://github.com/EconForge/dolang/blob/827ee3d200d35709b8e112b90f8703223834bf75/src/compiler.jl#L132-L144) – spencerlyon2
なぜメタプログラミングを使用していますか?この例は、 'eval(parse(" bit "と' '' '))'を取り出し、 '$'シンボルを削除するだけで動作します。 – StefanKarpinski