PARI/GP では,for 文,while 文,if 文などの制御構文を用いてプログラムが記述できる.プログラムは,一般にユーザ定義関数としてテキストファイルで書き,これを \r コマンドで読み込んで実行する.
ユーザー定義関数は,次のような形式である.
関数名(入力変数, ...) = { local(関数内で使う変数, ...); 実行文(セミコロンで区切る); return(戻り値); }
PARI/GP では,変数は基本的に大域変数である.一度値を割り当てられた変数は,プログラムの全体で可視となる. local 関数は,関数本体の中でのみ使える特殊な関数であり,その中に宣言されている変数を関数に局所化する働きを持つ.関数外に local 関数で定義した変数と同じ名前の変数があったとしてもそれとは無関係となる.
関数の定義例として,べき乗剰余演算をバイナリ法で行う関数 modexp を示す.
/* a^b mod n */ modexp (a, b, n) = { local(d, bin); d = 1; bin = binary(b); for (i = 1, length(bin), d = Mod(d*d, n); if (bin[i] == 1, d = Mod(d*a, n); ); ); return(d); }
PARI/GP における主な制御構文を示す.これ以外にもエラー処理やデバグ用の構文などがある.
以下の構文で,X は変数名,seq は式あるいはセミコロン ";" で区切られた式の並びを示す.また,"{}" は省略可能を示す.
if (test1, seq1, test2, seq2, ... testn, seqn, seqdefault);は,以下と等価である.
if (test1, seq1 , if (test2, seq2 , ... if (testn, seqn, seqdefault)...));
p = 1; fordiv(n, d, p *= d); p