これは、ほぼ 2 年前に私が尋ねた質問のフォローアップです。ベクトル/行列/テンソルの次元が型システム (Peano 番号付け) を使用してエンコードされる小さな線形代数ライブラリを作成するために、型システムをまだ試しています。これにより、コンパイラは二項演算を対応する次元のオブジェクトに制限できます。
うまく機能しますが、各ディメンション タイプを手動で指定する必要があります。例(形のない自然数を使用):
type _1 = Succ[Nat._0]
type _2 = Succ[_1]
type _3 = Succ[_2]
小さいサイズは問題ありませんが、サイズを定義する必要があると退屈になります_1024
。(コンパイル時に) 整数リテラルを対応する Peano-number 型に変換する方法を見つけようとしています (成功せずに)。
Daniel Sobral の回答コメントで、Scala は依存型をサポートしていないため、これは不可能であると言われました。現在、Scala 2.10 には依存型とマクロの両方があります。それを達成する方法はありますか?