PlusCal: データ構造と演算子
概要
Table of Contents
データ構造
ブール値
数値
文字列
文字列は \o (または \circ) で連結することができる。文字列への変換は ToString() を使用する。
タプル: << , , >>
TLA+ のタプル (tuple) も一般的なプログラミング言語でのタプルと同じ。順序付けられた固定個数の値を持つことのできるデータ構造で、それぞれの値の位置に対して値の型と値の意味が決まっている。TLA+ では << >> で囲んで表現する。
構造体
集合: .. または { , , }
集合は要素の重複を許可しない複合データ型である。variables や with で使用することで状態変数による挙動の検証ケースを増やす。
TLA+ や PlusCal での集合リテラルは 1..10 や {"A", "B", "C"} のように記述する。
多重集合型
関数
TLA+ / PlusCal で関数 (function) と呼ばれるものは他のプログラミング言語でマップ (写像) や連想配列と呼ばれている構造である。
| 演算子 | 呼び名 | 表記例 | 数式表記 | 意味 |
|---|---|---|---|---|
f[e] |
関数の適用 | y := f[x] |
|
関数 |
DOMAIN f |
関数の定義域 | x := DOMAIN f |
- | 関数 |
[x \in S |-> y] |
関数定義 | f = [x \in 0..9 |-> x * x] |
|
|
[S -> T] |
関数の集合 | f = [x \in 0..9 |-> x * x] |
|
|
演算子
PlusCal の演算子 (operator) は define ~ end define の間で定義する、
TLA+ における関数 (function) とは写像のことを意味しており、一般的なプログラミング言語で関数やプロシジャと呼ばれるものは演算子やマクロと呼んで区別している。
関係演算子
| 演算子 | 呼び名 | 表記例 | 数式表記 | 意味 |
|---|---|---|---|---|
= |
同じ値 | A = B |
|
|
/= |
異なる値 | A /= B |
|
# も同じ。 |
< |
小なり | A < B |
|
値 |
> |
大なり | A > B |
|
値 |
<= |
以下 | A <= B |
|
値 \leq, =< も同じ。 |
>= |
以上 | A >= B |
|
値 \geq も同じ。 |
\in |
包含 | x \in S |
|
|
\notin |
包含否定 | x \notin S |
|
|
論理演算子
| 演算子 | 呼び名 | 表記例 | 数式表記 | 意味 |
|---|---|---|---|---|
/\ |
論理積 | P /\ Q |
|
\land も同じ。 |
\/ |
論理和 | P \/ Q |
|
\lor も同じ。 |
~ |
否定 | ~P |
|
\lnot, \neg も同じ。 |
\A |
すべての | \A x \in S: P(x) |
|
集合 |
\E |
存在する | \E x \in S: P(x) |
|
集合 |
=> |
論理包含 | P => Q |
|
前提命題 |
<=> |
同値関係 | P <=> Q |
|
\equiv も同じ。 |
集合演算子
| 演算子 | 呼び名 | 表記例 | 数式表記 | 意味 |
|---|---|---|---|---|
CHOOSE |
単一選択 | CHOOSE x \in S: P(x) |
|
集合 |
参考文献
- Leslie Lamport (1997) The Operators of TLA+