最近做点小练习,写了以下的代码:
Test[5, x_, i_] :=
Block[{n = 0, sum = 0},
Catch[Print[0]; Label[Start]; Print["boot"]; Print[sum]; Print[n];
((sum +=
InverseFunction[Gamma][InverseFunction[Gamma][Zeta[N[i]]]];
n++; Print[1]; Goto[Start]) /;
OddQ[n] === False && n < NextPrime[x];
(sum +=
InverseFunction[Gamma][
InverseFunction[Gamma][Zeta[BarnesG[N[i] + I]]]]; n++;
Print[2]; Goto[Start]) /;
OddQ[n] === True && n < NextPrime[x];
Throw[sum] /; n >= NextPrime[x])]];
原本的期望是和输出以下代码一致:
Test[4, x_, i_] :=
Block[{n = 0, sum = 0},
Catch[Print[0]; Label[Start]; Print["boot"]; Print[sum]; Print[n];
Piecewise[{{sum +=
InverseFunction[Gamma][InverseFunction[Gamma][Zeta[N[i]]]];
n++; Print[1]; Goto[Start],
OddQ[n] === False && n < NextPrime[x]},
{sum +=
InverseFunction[Gamma][
InverseFunction[Gamma][Zeta[BarnesG[N[i] + I]]]]; n++;
Print[2]; Goto[Start],
OddQ[n] === True && n < NextPrime[x]}, {Throw[sum],
True}}]]];
但是测试一下的话:
Test[4, 10, 3]
Test[5, 10, 3]
Test5代码会陷入死循环....为何限制模式没法匹配Test5代码在后面的Print[2]和Throw?