maximaで繰り返し処理を行うにはfor,whileを使います。 C言語やjavaなどにあるfor,whileを知っている方なら とっつきやすいでしょう。 maximaではかなり多くの繰り返し構文があります。最初の構文は変数をfromからtoまで増分ずつ増やしながら処理を繰り返します。 stepとthruの箇所は入れ替えても構いません。 stepを省略すると1を指定したものとなり、 変数の初期値を省略すると初期値にも1を指定したことになります。 4番目の構文はシンプルで、繰り返し回数だけ処理を繰り返します。 whileは条件がtrueである間処理を繰り返します。 unlessは条件がfalseである間処理を繰り返します。 下から二番目の構文は、変数について、fromを開始とし、nextの箇所で指定した値に 変数の値を更新しながら処理を繰り返します。 最後の構文はいわゆるforeachループで、リストの要素を 先頭から一つずつ変数に設定し処理を繰り返します。 実際に使用した例をあげます。繰り返しの構文の書式
for 変数 : from step 増分 thru to do 処理 for 変数 : from thru to step 増分 do 処理 for 変数 : from thru to do 処理 for 変数 thru to do 処理 thru 繰り返し回数 do 処理 while 条件 do 処理 unless 条件 do 処理 for 変数 : from next 次の値 thru to do 処理 for 変数 in リスト do 処理next_prime関数は、指定された数の次の素数をかえす関数です。繰り返し処理の例
(%i1) i:0$while i<5 do(i:i+1,print("i=", i)); "i="1 "i="2 "i="3 "i="4 "i="5 (%o1) done (%i2) i:0$ unless i=5 do (i:i+1,print("i=",i)); "i="1 "i="2 "i="3 "i="4 "i="5 (%o2) done (%i3) thru 5 do print(1); 1 1 1 1 1 (%o3) done (%i4) /* jには初期値として1が使われる */ for j thru 5 do print(j); 1 2 3 4 5 (%o4) done (%i5) for j:3 thru 5 do print(j); 3 4 5 (%o5) done (%i6) for j:1 thru 5 step 2 do print(j); 1 3 5 (%o5) done (%i7) for j:1 step 2 thru 5 do print(j); 1 3 5 (%o5) done (%i8) for i : 2 next next_prime(i) thru 20 do print(i); 2 3 5 7 11 13 17 19 (%o8) done (%i9) for i in [1,2,3,5,7] do print(i); 1 2 3 5 7 (%o9) done