この種のマクロを作成したいとしましょう:
m(1, k)
生成されます:
match(k)
{
| 1 => 2
| _ => 0
}
m(2, k)
生成されます:
match(k)
{
| 1 => 2
| 2 => 3
| _ => 0
}
等々。可能な一致のような構造<[ $i => $(i + 1) ]>
は受け入れられますが、これらを組み合わせた一致式の作成方法がわかりません。もちろん、この例は考案されたものです ;)
この種のマクロを作成したいとしましょう:
m(1, k)
生成されます:
match(k)
{
| 1 => 2
| _ => 0
}
m(2, k)
生成されます:
match(k)
{
| 1 => 2
| 2 => 3
| _ => 0
}
等々。可能な一致のような構造<[ $i => $(i + 1) ]>
は受け入れられますが、これらを組み合わせた一致式の作成方法がわかりません。もちろん、この例は考案されたものです ;)
public macro m(to, k)
{
def toInteger(literal)
{
| <[ $(i : int) ]> => i
| _ => Message.Error(literal.Location, $"'$literal' integer literal expected"); 0;
}
def to = toInteger(to);
def createCases(i)
{
| i when (i > 0) => <[case: | $i => $(i + 1) ]> :: createCases(i - 1);
| _ => [ <[case: | _ => 0 ]> ]
}
<[
match ($k)
{
..$(createCases(to))
}
]>
}