Unity 勉強メモ

ゲームエンジンのUnityを勉強するブログです。

二週間でオレオレ言語を作るプロジェクト (2日目)

今日やった作業は以下の通りです。

今日の時点で階乗を計算する以下のプログラム(構文はまだ未確定)が 動くようになりました。

rec fact = \n ->
  if n == 0 then 1
  else n * fact (n - 1)
in
print (fact 5)

実行すると構文解析結果として

(rec fact : (Int -> Int) = (\n : Int -> (if ((n : Int) == 0) then 1 else ((n : I
nt) * ((fact : (Int -> Int)) ((n : Int) - 1))))) in (print ((fact : (Int -> Int)
) 5)))

型推論結果として

Int

クロージャ変換の結果として

=== function@001 ===
(if (<GetArg> == 0) then 1 else (<GetArg> * (<GetEnv 0> (<GetArg> - 1))))
=== Main ===
(rec fact : (Int -> Int) = (MakeClos function@001 (fact : <11>)) in (print ((fac
t : (Int -> Int)) 5)))

実行結果として

120

が得られます。

明日は上のfact関数を実際に.NETのILに変換するコンパイラを実装したいと 思います。