Google

Go to the first, previous, next, last section, table of contents.


文法 (C 言語との違い)

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 種類に単純化されている. トップレベル, すなわちプロンプトに対して入力された変数は全て大域変数 として登録される. また函数内では次のいずれかとなる.
    1. 函数が定義されるファイルにおいて, その函数定義以前に, ある 変数が extern 宣言されている場合, 函数内のその変数も大域変数 として扱われる.
    2. 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.