2 式
C言語と同様に、演算子には、左右の結合法則と優先順位がある。優先順に掲載する。演算の順序は、括弧で調整できる。
- | - | - |
---|---|---|
関数適用 | . () [] |
左結合 |
初期化 | new |
右結合 |
所有権 | owned shared borrowed unmanaged |
右結合 |
ヌル許容 | ? ! |
左結合 |
型変換 | : |
左結合 |
累乗 | ** |
右結合 |
集約 | reduce scan dmapped |
左結合 |
否定 | ! ~ |
右結合 |
乗除 | * / % |
左結合 |
符号 | + - |
右結合 |
シフト | << >> |
左結合 |
論理積 | & |
左結合 |
排他的論理和 | ^ |
左結合 |
論理和 | ` | ` |
加減 | + - |
左結合 |
レンジ | .. ..< |
左結合 |
順序比較 | <= => < > |
左結合 |
等値比較 | == != |
左結合 |
短絡論理積 | && |
左結合 |
短絡論理和 | ` | |
刻み幅 | by # align |
左結合 |
ループ変数 | in |
左結合 |
制御構造式 | if for forall sync single atomic |
左結合 |
区切り | , |
左結合 |
2.1 型変換
Chapelは、静的型付け言語である。また、型変換を明示的に行う場合は、:演算子を使う。以下に、型変換の例を示す。
writeln(1 + 2: real); // 3.0
writeln(int: string); // int(64)
2.2 集約演算
reduce演算子は、右辺の値を集計する。必要に応じて、並列処理が行われる。scan演算子は、集計の過程を順番に返す。
集計の内容は、+や*やminやmaxを指定できる。minlocやmaxlocの場合は、最小値または最大値の位置も取得できる。
writeln(+ scan(1..10)); // 1 3 6 10 15 21 28 36 45 55
writeln("value, index: ", minloc reduce zip([3, 2, 1], 0..2)); // value, index: (1, 2)
writeln("value, index: ", maxloc reduce zip([4, 5, 6], 0..2)); // value, index: (6, 2)