自作言語 oak その2
型とメタプログラミングについて。 var の仕様について。
let a: var (int, int) = (3, 5) a = (4, 6) // pass a!!0 = 4; a!!1 = 6 // error let b: var [int] = [4, 6, 8, 10] b = [3, 5, 7, 9] // pass b !! 0 = 3 // error
これを見れば大体わかると思う。
だが、var を再帰的に適用したいときがある。三次元配列の全てを自由にいじれる型は、
var [ var [ var [ var int ] ] ]
という型を持つが、これは書くのが大変である。そこで、mut という、型に対して型を返すメタ関数を、
mut int = var int mut a -> b = var ( a -> b ) mut [a] = var [ mut a ] mut *a = var ( *(mut a) ) mut (a0, ..., an) = var (mut a0, ..., mut an)
とすれば便利だ。しかし、これを言語仕様として定めずに、言語内でこの mut というメタ関数を書けるようにしたら面白くなるだろう。D言語のテンプレートに近いものを感じる。