kogad blog

進化計算とかプログラミングとか,勉強したことを書きます.

Julia の多重ディスパッチを使って木構造で表現される数式を評価する

はじめに

以前,遺伝的プログラミングを実装したとき,木構造で表現された数式を評価する処理を,再帰を使って書いたことがありました.

よく考えると,多重ディスパッチも使うとスッキリ書けそうだなと思ったので,試しにやってみました.

実装

演算子,変数,定数となる頂点の型(構造体)を定義して,それぞれの型ごとに関数を定義してやるだけです.

  • 演算子の頂点であれば,子の頂点に演算子を適用する
  • 変数の頂点であれば,その頂点が持つ変数に対応する数値を取り出す
  • 定数の頂点であれば,その定数をそのまま返す

変数と,変数に代入する値はディクショナリで管理しています.

gist711c8bf24be47dfcfbceddd469e5ff71