如何编写Rust宏将行主顺序转换为列主顺序



宏将允许您以自然的方式编写任何M x N矩阵。例如:

matrix![
1.0, 3.0, 5.0;
2.0, 4.0, 6.0;
]

其对应于以下矩阵。

┌                 ┐
│  1.0  3.0  5.0  │
│  2.0  4.0  6.0  │
└                 ┘

宏将输出一个数组数组,如下所示:

[[1.0, 2.0], [3.0, 4.0], [5.0, 6.0]]

我知道,我可以很简单地使用以下内容来解析行主顺序。但是我怎样才能将其转换为列主顺序呢。我不知道如何切换重复组的顺序。

macro_rules! matrix {
($($($e:expr),*);*) => {(
[$([$($e),*]),*]
}
}

开始:

macro_rules! matrix {
($($($v:expr),* );*) => {
matrix!(@phase2 [] $($($v),* );*)
};
(@phase2 [$([$($col:expr),*])*] $($v:expr);* ) => {
[$([$($col),*],)* [$($v),*]]
};
(@phase2 [$([$($col:expr),*])*] $($v0:expr, $($v:expr),* );* $(;)?) => {
matrix!(@phase2 [$([$($col),*]),* [$($v0),*]] $($($v),* );*)
};
}

最新更新