このチャプターの目次

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)