あなたのコードを見てみましょう:
for i:1 while i<=21 do(for j:1 while j<=21 do
(if i<j then aa:realpart(c1[-j+i+21]))) and do aa1:makelist(aa,i,1,21,1);
これをもう少し明確にフォーマットすると、次のようになります。
for i:1 while i<=21 do
(for j:1 while j<= 21 do
(if i<j then aa:realpart(c1[-j+i+21])
)
)
and
do aa1:makelist(aa,i,1,21,1);
さて、「and」はブール演算子であり、それを 2 つのループに適用することは (ループがブール値を返さない限り) あまり意味がありませんが、Maxima ではそれを書くことができます。(a and b) または (a and do b) の代わりに、a の次に b を実行する (a,b) を書きたいと思うでしょう。
ネスティングもおそらくあなたが意図したものではありません。
2 番目のループは「do aa1:...」です。Maxima では、"do xxx" は "while true do xxx"、つまり無限ループと同等です。これにより、このコードが返されなかった理由が説明されます。
ちなみに、「for i:1 while i<=21 do...」のより簡単な書き方は「for i through 21 do...」です。
お役に立てれば。
-s