
|
Go to the first, previous, next, last section, table of contents.
Asir の文法は C 言語に準拠している.
おもな相違点は次の通りである. 以下で, 変数とは Asir における
プログラム用の変数, すなわち大文字で始まる文字列を意味することとする.
-
変数の型がない.
既に説明したとおり, Asir で扱われる対象自身は全て何らかの型
を持っている. しかし, プログラム変数自体は, どのような対象でも
代入できるという意味で型がないのである.
[0] A = 1;
1
[1] type(A);
1
[2] A = [1,2,3];
[1,2,3]
[3] type(A);
4
-
函数内の変数は, デフォルトでは仮引数をこめてすべて局所変数.
ただし, extern 宣言された変数は, トップレベルにおける大域変数となる.
すなわち, 変数のスコープは大域変数と局所変数の 2 種類に単純化されている.
トップレベル, すなわちプロンプトに対して入力された変数は全て大域変数
として登録される. また函数内では次のいずれかとなる.
-
函数が定義されるファイルにおいて, その函数定義以前に, ある
変数が
extern 宣言されている場合, 函数内のその変数も大域変数
として扱われる.
-
extern 宣言されていない変数はその函数に局所的となる.
% cat afo
def afo() { return A;}
extern A$
def bfo() { return A;}
end$
% asir
[0] load("afo")$
[5] A = 1;
1
[6] afo();
0
[7] bfo();
1
-
プログラム変数は大文字で始まり, 不定元, 函数は小文字で始まる.
この点は, 既存の数式処理システムのほとんどと異なる点である. Asir
がこの仕様を採用したのは, ユーザが不定元のつもりで使用した変数に
なんらかの値が代入されていた場合に混乱を招く, という, 既存の
システムにありがちな状況を避けるためである.
-
switch 文, goto がない.
goto がないため, 多重ループを一度に抜けるのがやや複雑になる場合がある.
-
コンマ式は,
for (A;B;C) または, while(A) の A ,
B , C にのみ使うことができる.
これは, リストを正式なオブジェクトとして加えたことによる.
以上は制限であるが, 拡張としては次の点が挙げられる.
-
有理式に対する計算を, 通常の C における計算と同様にできる.
-
リストが扱える.
構造体を用いるまでもない要素の集合体を, リストで表すことができ,
C で直接書く場合に比較してプログラムが短く, 読みやすく書ける.
-
ユーザ定義函数におけるオプション指定.
これに関しては, See section オプション指定.
Go to the first, previous, next, last section, table of contents.
|