手続き
使い方
proc (argseq) local nseq; global nseq; options nseq; description stringseq; statseq end proc
proc (argseq)::type; local var1::type1, var2::type2, ...; global nseq; options nseq; description stringseq; statseq end proc
パラメータ
argseq - 形式パラメータの名前
type - 戻り値の型宣言 (なくてもよい)
nseq - 局所/大域変数名とオプションの並び (なくてもよい)
var1, var2 - 局所変数名 (なくてもよい)
type1, type2 - 局所変数の型宣言 (なくてもよい)
stringseq - この手続きを説明する文字列からなる行
statseq - この手続きの本体
|
説明
|
|
•
|
手続き定義は名前に割り当てることができる正しい式です。
|
•
|
括弧で囲まれた argseq (NULL でもよい) は、形式パラメータの名前を指定するものです。各パラメータは記号で、オプションとして、ダブルコロン (::) に続けて型の指定をすることができます。その型指定があるときは、関数に型の正しくない引数が渡されると、Maple はエラーを生成します。引数が足りないときにも Maple はエラーを生成しますが、そういう引数が初めて必要になるまで、そのエラーは生成されません。さらに詳しい情報については、procedure[paramtype] を参照して下さい。
|
•
|
オプションとして、argseq の後で括弧を閉じた後に :: と type と ; を続けることができます。これは型宣言ではなく、主張です。kernelopts(assertlevel) が 2 に設定されていると、手続きが値を返すときに、その値の型がチェックされます。その型がその主張に合わないときは、例外が発生します。
|
•
|
local nseq;, global nseq;, options nseq; の部分はいずれもなくてもかまいません。もしそれがあれば、それぞれ局所変数名、大域変数名、オプションが指定されます。
|
•
|
local nseq; の部分に現れる局所変数の後には、オプションとして、:: と type が続くことができます。戻り値の型の場合と同様に、それは型宣言ではなく、主張です。kernelopts(assertlevel) が 2 に設定されていれば、型が主張されている変数に対する割り当てはそれが実行される前にチェックされます。その割り当てが主張と合わないときには、例外が発生します。
|
•
|
description stringseq; は手続きについての1行以上の説明を与えるものです。その手続きを印字したとき、この説明文も印字されます。一般的に、ライブラリ手続きを印字したときに、その本体は省略されますが、その説明文 (もしあれば) はやはり印字されます。
|
•
|
op 関数は手続きの 8 個の被作用子にアクセスできます。
|
|
op 1 は形式パラメータの argseq です。
|
|
op 8 は return type (もしあれば) です。
|
|
上のどの被作用子も null になるかもしれません。
|
•
|
変数の宣言が行われていなければ、変数が局所変数なのか大域変数なのかを決定するのに、次の規則が使われます。
|
|
その変数が、それを含む最も内側の手続きから初めて、手続きの局所変数または大域変数の宣言に中にあるかを調べられます。もしその変数名がパラメータ、局所変数、大域変数のいずれかとして発見できれば、それがその変数を拘束しているところです。そうでなければ、割り当てを実行される変数と for ループの中の制御変数として現れる変数は局所変数です。それ以外は全て大域変数でう。
|
|
注意: _Env で始まる名前 (name) は環境変数として考慮されます。
|
•
|
手続きには (テーブルに似た) 特殊な評価規則があります。それによると、名前 f に手続きが割り当てられていれば、
|
|
eval(f) は実際の手続きの構造を生み出します。
|
|
op(eval(f)) は上で述べた 8 個の被作用子 (どれか、またはずべてが null でもよい) の列を生み出します。
|
•
|
f に割り当てられた手続きは f(arguments) によって呼び出すことができます。その際に渡されるパラメータの説明に関しては parameters を参照して下さい。手続き呼び出しの値は最後に実行された文の値であるか、return 文で指定された値です。
|
•
|
記憶テーブル (remember オプション) は変化しやすいオブジェクト (たとえば、rtables) を入力として受け付けるように作られた手続きに対しては使うべきではありません。なぜなら、Maple は記憶テーブルから値を探している間にそのオブジェクトが変化したことを感知しないからです。
|
|
|
例
|
|
>
|
lc := proc( s, u, t, v )
description "form a linear combination of the arguments";
s * u + t * v
end proc;
|
| (2.1) |
| (2.2) |
| (2.3) |
|
|
参照
|
|
envvar,error, Functions, index[procedure], kernelopts, last_name_eval, Operators, parameters, Parameter passing, Procedure options, remember, Procedure type checking, procedure[paramtype], procname, Reading and saving, arg, nargs, return, spec_eval_rules, type[procedure], type[function]
|
|